Ubuntu grep, знайдіть тощо: "Дозвіл відхилено" та "Немає такого файлу чи каталогу"


17

Коли я використовую grepабо find, мене завжди дратують повідомлення "Дозвіл відхилено" та "Немає такого файлу чи каталогу", щось подібне:

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

Як я можу їх уникнути і зробити так, щоб я бачив лише відповідні дані, тобто те, що я дійсно шукаю?


Відповіді:


24

за допомогою grep ви можете вказати прапор -s, який робить майже все, що сказав @ortang

-s, --no-messages Подавлення повідомлень про помилки щодо неіснуючих чи нечитабельних файлів. Примітка щодо переносимості: на відміну від GNU grep, 7-е видання Unix grep не відповідало POSIX, оскільки йому бракувало -q, а його -s варіант поводився як -q варіант GNU grep. У грецькому стилі USG також не вистачало -q, але його -s варіант поводився як GNU grep. Сценарії портативної оболонки повинні уникати і -q, і -s, а також слід перенаправляти стандартні та вихідні помилки на / dev / null.

з пошуку, наскільки я знаю, @ortangs відповідь найкраща. щось на зразок

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


6

Спробуйте перенаправити stderr на /dev/null.

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

5

Перенаправлення на strerr на /dev/null(ака black hole) - це хороший спосіб придушення помилок, відхилених у дозволі.

Однак зауважте, що ця рана не тільки придушує permission deniedповідомлення, але ВСІ повідомлення про помилки.

Якщо ви хочете зберегти повідомлення про помилки, крім permission denied того, ви можете зробити щось подібне -

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

Якщо ви не хочете зберігати ці, то наступне було б добре -

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

1
Ви не можете скопіювати те, що вже переспрямовано на / dev / null.
choroba

@choroba Виправили відповідь. Має на увазі написати 2>&1замість 2> /dev/nullпершої пропозиції.
jaypal singh

Так, ви повинні перенаправити stderrдо stoutпершого.
ortang

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

Використовуйте sudoкоманду для піднесення команди для отримання адміністративних привілеїв.


0

Використання "| &" перед grep -v почне справлятися з цим, напр

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.