Как использовать grep для всех файлов нерекурсивно в каталоге?

В Bash глобус не будет расширяться в скрытые файлы, поэтому, если вы хотите выполнить поиск все файлы в каталоге, вам нужно указать скрытые файлы .* и не скрытый *.

Чтобы избежать ошибок "Это каталог", вы могли бы использовать -d skip, но в моей системе я также получаю сообщение об ошибке grep: .gvfs: Permission denied, поэтому я предлагаю использовать -s, который скрывает все сообщения об ошибках.

Итак, команда, которую вы ищете, - это:

grep -s "string" * .*

Если вы ищете файлы в другом каталоге:

grep -s "string" /path/to/dir/{*,.*}

Другим вариантом является использование dotglob опция оболочки, которая заставит глобус включать скрытые файлы.

shopt -s dotglobgrep -s "string" *

Для файлов в другом каталоге:

grep -s "string" /path/to/dir/*

† Кто-то упомянул, что я не должен получать эту ошибку. Возможно, они правы - я кое-что прочитал, но сам ничего не понял.