Что означает символ звездочки * в шестнадцатеричных данных?

Хотя -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
1
25.06.2015, 13:18
0 ответов

Теги

Похожие вопросы