Хотя -exec
в основном используется для каких-либо действий с найденными файлами, он также может выступать в качестве теста. Следовательно, мы можем добавить его к другим вашим критериям:
find . \
-size 1033c \
-not -executable \
-exec sh -c 'file {} | grep "text$"' \;
Помните, grep
возвращает ненулевое значение, если шаблон не был найден, а sh -c "COMMAND"
вернет результат оценки (если он действителен). Таким образом, это будет печатать только файлы, в которых file
выплевывает что-то, заканчивающееся на text
, например «UTF-8 Unicode text` или« ASCII text », но не« Text non-ISO extended-ASCII, с escape-последовательностями ».
В одной строке он даже оказывается короче, чем переход через xargs
:
find . -size 1033c -not -executable -exec sh -c 'file {} | grep "text$"' \;
Имейте в виду, что вы можете заменить sh -c 'file {} | grep "text $"'
любой пользовательской командой. Если вы хотите проверить что-то очень сложное, это может Лучше предоставить сценарий оболочки и использовать его вместо:
find . -size 1033c -not -executable -exec is_human_readable.sh {} \;
который, в конечном итоге, легче поддерживать, чем историю вашей оболочки:
#!/bin/sh
file "$@" | grep "text$" > /dev/null