Ubuntu grep, find etc: output "Autorizzazione negata" e "Nessun file o directory del genere"


17

Quando uso grepo find, sono sempre infastidito dalle notifiche "Autorizzazione negata" e "Nessun file o directory del genere", qualcosa del genere:

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

Come posso evitarli e farlo in modo da vedere solo i dati rilevanti, cioè qualcosa che sto davvero cercando?


Risposte:


24

con grep potresti specificare il flag -s che fa praticamente quello che ha detto @ortang

-s, --no-message Elimina i messaggi di errore relativi a file inesistenti o illeggibili. Nota sulla portabilità: a differenza di GNU grep, 7th Edition Unix grep non era conforme a POSIX, perché mancava -q e la sua opzione -s si comportava come l'opzione -q di GNU grep. Anche grep in stile USG mancava di -q ma la sua opzione -s si comportava come grep GNU. Gli script di shell portatili dovrebbero evitare sia -q che -s e dovrebbero invece reindirizzare l'output standard e di errore su / dev / null.

con find, per quanto ne so, la risposta di @ortangs è la migliore. qualcosa di simile a

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


6

Prova a reindirizzare stderra /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

Reindirizzare il strerrto /dev/null(aka black hole) è un buon modo per sopprimere gli errori di autorizzazione negati.

Tuttavia, si noti che questa ferita non solo sopprime i permission deniedmessaggi ma TUTTI i messaggi di errore.

Se desideri conservare messaggi di errore diversi da quelli in permission deniedquel momento, puoi fare qualcosa del genere:

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

Se non desideri trattenerli, il seguente sarebbe perfetto:

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
Non è possibile eseguire il grep di qualcosa che è già stato reindirizzato a / dev / null.
Choroba,

@choroba Hanno corretto la risposta. Volevo scrivere 2>&1invece che 2> /dev/nullper il primo suggerimento.
jaypal singh,

Sì, è necessario reindirizzare stderra stoutprima.
dal

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Utilizzare il sudocomando per elevare il comando per disporre dei privilegi di amministratore.


0

Usando "| &" prima di grep -v ci occuperemo di esso, ad es

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.