Ubuntu grep, find etc: "Permissão negada" e "Nenhum arquivo ou diretório"

16

Quando uso grep ou find , sempre me irrito com os avisos "Permissão negada" e "Nenhum arquivo ou diretório", algo assim:

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

Como posso evitá-los e fazer com que eu veja apenas dados relevantes, ou seja, algo que estou realmente procurando?

    
por wrong-about-everything 24.01.2012 / 18:08

5 respostas

21

com o grep você pode especificar o sinalizador -s que faz praticamente o que o @ortang disse

-s, --no-messages Suppress error messages about nonexistent or unreadable files. Portability note: unlike GNU grep, 7th Edition Unix grep did not conform to POSIX, because it lacked -q and its -s option behaved like GNU grep's -q option. USG-style grep also lacked -q but its -s option behaved like GNU grep. Portable shell scripts should avoid both -q and -s and should redirect standard and error output to /dev/null instead.

com o find, até onde eu sei, a resposta do @ortangs é a melhor. algo como

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

    
por 24.01.2012 / 19:51
6

Tente redirecionar stderr para /dev/null .

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
    
por 24.01.2012 / 18:54
5

Redirecionar o strerr para /dev/null (a.k.a black hole ) é uma boa maneira de suprimir erros de permissão negada.

No entanto, observe que essa falha não apenas suprime as mensagens de erro permission denied , mas ALL .

Se você deseja reter mensagens de erro diferentes de permission denied , pode fazer algo assim:

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

Se você não deseja retê-los, então o seguinte seria ótimo -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
    
por 24.01.2012 / 19:15
3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Use o comando sudo para elevar o comando para ter privilégios administrativos.

    
por 25.01.2012 / 11:22
0

Usando "| &" antes que o grep -v lide com ele, por exemplo

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
    
por 31.07.2018 / 22:21