Ubuntu grep, find etc: wyjście „Odmowa dostępu” i „Brak takiego pliku lub katalogu”

17

Kiedy używam greplub find, zawsze denerwują mnie powiadomienia „Odmowa zezwolenia” i „Brak takiego pliku lub katalogu”, coś takiego:

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

Jak mogę ich uniknąć i sprawić, że widzę tylko istotne dane, tj. Coś, czego naprawdę szukam?

źle o wszystkim
źródło
Powiązane: stackoverflow.com/a/25234419/54964
Léo Léopold Hertz

Odpowiedzi:

24

z grep możesz podać flagę -s, która robi prawie wszystko, co powiedział @ortang

-s, --no-messages Pomija komunikaty o błędach dotyczące nieistniejących lub nieczytelnych plików. Uwaga dotycząca przenośności: w przeciwieństwie do GNU grep, grep uniksowy 7. edycji nie był zgodny z POSIX, ponieważ brakowało w nim opcji -q, a opcja -s zachowywała się jak opcja -q GNU grep. Grep w stylu USG również nie miał opcji -q, ale jego opcja -s zachowywała się tak jak GNU grep. Przenośne skrypty powłoki powinny unikać zarówno -q, jak i -s, a zamiast tego powinny przekierowywać wyjście standardowe i dane błędu do / dev / null.

z find, o ile wiem @ortangs, odpowiedź jest najlepsza. coś jak

find / -name "myfile" -type f -print 2>/dev/null

matchew
źródło
6

Spróbuj przekierować stderrdo /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
ortang
źródło
5

Przekierowanie strerrdo /dev/null(aka black hole) jest dobrym sposobem tłumienia Permission denied błędów.

Należy jednak pamiętać, że ta rana nie tylko tłumi permission deniedkomunikaty, ale WSZYSTKIE komunikaty o błędach.

Jeśli chcesz zachować komunikaty o błędach inne niż permission deniedwtedy, możesz zrobić coś takiego -

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

Jeśli nie chcesz ich zachować, następujące elementy byłyby w porządku -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
jaypal singh
źródło
1
Nie możesz grepować czegoś, co zostało już przekierowane do / dev / null.
choroba
@choroba Poprawiono odpowiedź. Chodzi o pisanie 2>&1zamiast o 2> /dev/nullpierwszą sugestię.
jaypal singh
Tak, trzeba przekierować stderrdo stoutpierwszego.
ortang
3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Użyj sudopolecenia, aby podwyższyć polecenie, aby mieć uprawnienia administracyjne.

Nurlan
źródło
0

Użycie „| &” przed grep -v sobie z tym poradzi, np

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Fluffball
źródło