Я пытаюсь найти каталог установки определенного пакета. У меня есть определенное ключевое слово, с помощью которого я пытаюсь найти определенный файл.
Во время grep я хочу включить только тип файла cpp или h . Я не хочу, чтобы grep отображал предупреждения типа « Отказано в доступе» или « Не удалось найти каталог» . Я просто хочу, чтобы он отображал совпадающие файлы, больше ничего. Подскажите пожалуйста как мне это сделать?
В настоящее время я использую
grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./
find . 2>/dev/null | grep 404.html
, как будет выглядеть командаБолее прямо, чем фильтрация предупреждений, вы можете отключить их, добавив
-s
:Есть некоторые проблемы совместимости с этой опцией. Тем не менее, это не должно быть проблемой для личного использования.
источник
Я имел обыкновение получать массу раздражающих сообщений, таких как это:
Причина в том, что
--directories
флаг по умолчаниюread
. Я изменил это наrecurse
; если вы не хотите, чтобы он автоматически выполнял рекурсивный поиск, вы можете использоватьskip
вместо него.Самый простой способ справиться с этим постоянно - это установить его в переменной окружения. В
~/.bash_profile
или в~/.bashrc
зависимости от вашего дистрибутива:Теперь он автоматически подавляет эти сообщения каждый раз, когда я использую grep.
Другим вариантом является
--no-messages
флаг, стенография-s
. Это также избавит отIs a directory
сообщений, но также подавит другие сообщения, которые могут быть более полезными. Например, если вы выполняете вложенный поиск,*/*/*
и такого файла с этим шаблоном не существует, он вам об этом не скажет.источник
Альтернативный подход вместо использования
grep
рекурсивного режима-ir
заключается в том, чтобы позволитьfind
команде (которая по умолчанию является рекурсивной) обрабатывать разрешения с-readable
флагом и путем для исключения с помощью-not -path "*.svn*"
флагов, а затем передавать файл вgrep
. Исключение каталогов производится через-type f
поиск только обычных файлов.источник
При выполнении рекурсивного поиска в определенных файлах вам гораздо лучше использовать
ack-grep
. Синтаксис здесь будет:Чтобы удалить сообщения об ошибках разрешения, вы можете запустить ту же команду с
sudo
:Но, в конце концов, если вы хотите искать в установленных пакетах, посмотрите на эти различные варианты: https://www.google.com/search?q=ubuntu%20search%20inside%20installed%20packages
источник