grep -I
игнорирует файлы, отличные от -ASCII. Это нестандартная -опция, но реализуемая многими grep
s.
find thefolder -type f -exec grep -q -I. {} ';' -print
Это будет список всех файлов в или ниже thefolder
, которые были ASCII (в соответствии сgrep
)и не -пустыми (мы просим grep
искать один символ ).
С помощью GNU find
вы также можете легко игнорировать файлы, к которым у вас нет доступа для чтения:
find thefolder -type f -readable -exec grep -q -I. {} ';' -print
Единственная разница здесь в том, что вы избежите нескольких ошибок «Отказано в доступе».
С grep
реализацией, которая может выполнять рекурсивный поиск:
grep -rlI. thefolder
Используя file
, как вы предлагаете:
find thefolder -type f -exec sh -c 'file "$1" | grep -qi text' sh {} ';' -print
Это намного медленнее, чем первое решение, но работает, если вы уверены, что file
работает правильно.
Немного быстрее (выполняется sh
только один или несколько раз):
find thefolder -type f -exec sh -c '
for pathname do
if file "$pathname" | grep -qi text; then
printf "%s\n" "$pathname"
fi
done' sh {} +