Mitenkähän tämä find komento saataisiin tulostamaan vain ne löydetyt tiedosto nimet?
find ./ -name "*.txt"
Näitä ei saisi listauksessa olla mukana:
find: ‘./.cache/dconf’: Lupa evätty
find ./ -name "*.txt"
Näitä ei saisi listauksessa olla mukana:
find: ‘./.cache/dconf’: Lupa evätty
Vastaukset 5
Vanhimmat
Ohjataan virheet eli stderr eli output 2 -> /dev/null = vain normal output eli 1 näkyy
find ./ -name "*.txt" 2>/dev/null
jos haluat virheet tiedostoon niin
find ./ -name "*.txt" 2>virheet.txt
mene nyt w ittuun valheines! /dev/null Pata.
Hienoa, tämä toimii!
Ensinnäkin tuo ketjun aloituksessa mainittu virhehän johtuu siis siitä, että käyttäjällä, joka ajaa komennon find, ei ole lukuoikeutta hakemistoon ./.cache/dconf
Tuo ketjussa aiemmin annettu ohje on toimiva, jos halutaan estää kaikkien virheilmoitusten näkyminen tulosteessa. Eli siis jos halutaan estää kaikkien mahdollisten virhetilanteiden, ei pelkästään lukuoikeuksien puuttumisesta aiheutuvien virhetilanteiden, näyttäminen tulosteessa.
Jos halutaan estää ainoastaan lukuoikeuksien puuttumisesta aiheutuvien virheiden näkyminen tulosteessa, niin se voidaan tehdä näin:
find ./ -name "*.txt" 2>&1 | grep -v "Lupa evätty"
Tuo komento ohjaa sekä stdin, että stderr -tulostusvirrat stdin -tulostusvirtaan. Sen jälkeen grep suodattaa pois rivit, joilla on merkkijono "Lupa evätty".
T. miksuh
Hups. Tarkoitin edellisessä viestissäni tietenkin sanoa, että sekä stdout, että stderr -tulostusvirrat ohjataaan stdout -tulostusvirtaan. Jotenkin tuon stdout:n tilalle lipsahti stdin.
Jokatapauksessa antamani komento toimii, komennon selitykseen vain lipsahti virhe.
T. miksuh