Ubuntu grep, find и т. Д.: Вывод «Разрешение отказано» и «Нет такого файла или каталога»

Когда я использую grep или find , меня всегда раздражают уведомления «Permission denied» и «No such file or directory», что-то вроде этого:

 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 

Как я могу избежать их и сделать это, поэтому я вижу только релевантные данные, то есть то, что я действительно ищу?

  • Как сделать все файлы неисполняемыми рекурсивно, используя find, не затрагивая каталоги?
  • Найти файлы документов и скопировать их в другой каталог
  • Найти & du для вычисления общего размера vs xargs
  • Keep Find bar открыть все остальные вкладки в Firefox 25
  • Как объединить поиск и grep для сложного поиска? (GNU / linux, find, grep)
  • Найти каталоги со всеми файлами внутри старше X?
  • Пауза для всех задач, отличных от x ЦП
  • Эквивалент Powershell `grep -r -l` (-files-with-matches)
  • Что определяет, что отображается в команде истории bash?
  • Как вы можете настроить подсказку терминала bash с помощью смайликов?
  • Ffmpeg последовательность изображений
  • Не удается выполнить ping в Bash на Windows
  • 4 Solutions collect form web for “Ubuntu grep, find и т. Д.: Вывод «Разрешение отказано» и «Нет такого файла или каталога»”

    С grep вы можете указать флаг -s, который делает в значительной степени то, что сказал @ortang

    -s, –no-messages Подавлять сообщения об ошибках о несуществующих или нечитаемых файлах. Замечание о переносимости: в отличие от GNU grep, 7-е издание Unix grep не соответствовал POSIX, поскольку ему не хватало опции -q и его -s, как и опция -q GNU grep. В графе greg также не было -q, но его опция -s вела себя как GNU grep. Переносимые сценарии оболочки должны избегать как -q и -s, а затем перенаправлять стандартный и вывод ошибок в / dev / null.

    С нахождением, насколько я знаю, ответ @ortangs является лучшим. что-то вроде

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

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

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

    Перенаправление strerr в /dev/null (aka 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 
     johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn 

    Используйте команду sudo чтобы поднять команду, чтобы иметь административные привилегии.

    Давайте будем гением компьютера.