Ubuntu grep, find etc: “İzin reddedildi” ve “Böyle bir dosya veya dizin yok” çıktısı


17

grepVeya kullandığımda find, "İzin reddedildi" ve "Böyle bir dosya veya dizin yok" bildirimleriyle her zaman rahatsız oluyorum:

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

Onlardan nasıl kaçınabilirim ve sadece ilgili verileri, yani gerçekten aradığım bir şeyi görecek şekilde yapabilirim?


Yanıtlar:


24

grep ile, @ ortang'in söylediklerini yapan -s bayrağını belirtebilirsiniz.

-s, --no-messages Varolmayan veya okunamayan dosyalar hakkındaki hata iletilerini bastırır. Taşınabilirlik notu: GNU grep'ten farklı olarak, 7. Baskı Unix grep POSIX ile uyumlu değildi, çünkü -q ve -s seçeneği GNU grep'in -q seçeneği gibi davrandı. USG tarzı grep de -q içermiyordu ama -s seçeneği GNU grep gibi davrandı. Taşınabilir kabuk komut dosyaları -q ve -s değerlerinden kaçınmalı ve bunun yerine standart ve hata çıktısını / dev / null değerine yönlendirmelidir.

Bildiğim kadarıyla bulmak @ortangs cevap en iyisidir. gibi bir şey

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


6

Yönlendirme deneyin stderriçin /dev/null.

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

5

Yönlendirme strerriçin /dev/null(aka black hole) izni reddedildi hataları bastırılmasının iyi bir yoldur.

Ancak, bu yaranın sadece permission deniedmesajları değil TÜM hata mesajlarını da bastırdığını unutmayın .

Bunun dışındaki hata mesajlarını saklamak permission deniedistiyorsanız, bunun gibi bir şey yapabilirsiniz -

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

Bunları saklamak istemiyorsanız, aşağıdakiler iyi olur -

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

1
Zaten / dev / null dizinine yönlendirilmiş bir şeyi gizleyemezsiniz.
choroba

@choroba Cevabı düzelttik. İlk öneri 2>&1yerine yazmak istedim 2> /dev/null.
jaypal singh

Evet, önce yönlendirmeniz stderrgerekiyor stout.
ortang

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

Kullanım sudoyönetici ayrıcalıklarına sahip üzere komutu yükseltmek için komut.


0

Grep -v'den önce "| &" kullanılması onunla ilgilenir, örn.

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.