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?

salah tentang segalanya
sumber
Terkait: stackoverflow.com/a/25234419/54964
Léo Léopold Hertz 준영

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

cocok
sumber
6

Coba redirect stderrke /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
ortang
sumber
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
jaypal singh
sumber
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.

Nurlan
sumber
0

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

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Bola bulu
sumber