Это не всегда применимо, но когда это, это - простое решение. Установите globstar
опция (set -o globstar
в ksh93, shopt -s globstar
в ударе ≥4; это идет по умолчанию в zsh). Затем используйте **/
соответствовать текущему каталогу и его подкаталогам рекурсивно.
Например, вместо find . -name '*.txt' -exec somecommand {} \;
, можно работать
for x in **/*.txt; do somecommand "$x"; done
Вместо find . -type d -exec somecommand {} \;
, можно работать
for d in **/*/; do somecommand "$d"; done
Вместо find . -newer somefile -exec somecommand {} \;
, можно работать
for x in **/*; do
[[ $x -nt somefile ]] || continue
somecommand "$x"
done
Когда **/
не работает на Вас (потому что Ваша оболочка не имеет его, или потому что Вам нужен a find
опция, которая не имеет аналога оболочки), определите функцию в find -exec
аргумент.
Нет, это не повредит производительность. Подстановочный знак является единственной ресурсной записью. Это больше не берет или меньше системных ресурсов, чем какая-либо другая единственная ресурсная запись.