Ubuntu grep, find dll: "Izin ditolak" dan "Tidak ada file atau direktori" yang dihasilkan


17

Ketika saya menggunakan grepatau find, saya selalu merasa terganggu oleh pemberitahuan "Izin ditolak" dan "Tidak ada file atau direktori", sesuatu seperti ini:

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

Bagaimana saya bisa menghindarinya dan membuatnya jadi saya hanya melihat data yang relevan, yaitu sesuatu yang benar-benar saya cari?


Jawaban:


24

dengan grep Anda dapat menentukan flag -s yang tidak cukup banyak apa yang dikatakan @ortang

-s, --no-messages Menekan pesan kesalahan tentang file yang tidak ada atau tidak dapat dibaca. Catatan portabilitas: tidak seperti GNU grep, Edisi ke-7 Unix grep tidak sesuai dengan POSIX, karena tidak memiliki -q dan opsi -snya berperilaku seperti opsi -q GNU grep. Grep gaya USG juga tidak memiliki -q tetapi opsi -snya berperilaku seperti grep GNU. Skrip shell portabel harus menghindari -q dan -s dan harus mengarahkan standar dan output kesalahan ke / dev / null.

dengan menemukan sejauh yang saya tahu jawaban @ortangs adalah yang terbaik. sesuatu seperti

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


6

Coba redirect stderrke /dev/null.

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

5

Mengarahkan strerrke /dev/null(alias black hole) adalah cara yang baik untuk menekan izin yang ditolak kesalahan.

Namun, harap dicatat bahwa luka ini tidak hanya menekan permission deniedpesan tetapi SEMUA pesan kesalahan.

Jika Anda ingin menyimpan pesan kesalahan selain dari permission denieditu, Anda dapat melakukan sesuatu seperti ini -

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

Jika Anda tidak ingin mempertahankannya maka yang berikut akan baik-baik saja -

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

1
Anda tidak dapat menerima sesuatu yang telah diarahkan ke / dev / null.
choroba

@choroba Telah mengoreksi jawabannya. Dimaksudkan untuk menulis 2>&1bukan 2> /dev/nulluntuk saran pertama.
jaypal singh

Ya, Anda harus mengarahkan ulang stderrke yang stoutpertama.
ortang

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

Gunakan sudoperintah untuk meninggikan perintah untuk memiliki hak administratif.


0

Menggunakan "| &" sebelum grep -v akan menghadapinya, mis

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.