знайти. -тип f -name "* .htm *" -o -name "* .js *" -o -name "* .txt"
скорочено:
знайти. \ (\ ( -тип f -a- ім'я "* .htm *" \) -o \
\ ( -name "* .js *" \) -o \
\ ( -ім'я "* .txt" \) \
\) -а -друк
Тобто, оскільки не вказаний предикат дії (лише умови ), -print
дія неявно додається для файлів, які відповідають умовам.
(і, до речі, це друкувало б нестандартні .js
файли ( -type f
стосується лише .htm
файлів)).
Поки:
знайти. -тип f -name "* .htm *" -o -name "* .js *" -o -name "* .txt" \
-exec sh -c 'echo "$ 0"' {} \;
скорочено:
знайти. \ ( -тип f -a -name "* .htm *" \) -o \
\ ( -name "* .js *" \) -o \
\ ( -name "* .txt" -a -exec sh -c 'echo "$ 0"' {} \; \)
Для find
(як у багатьох мовах) AND ( -a
; неявна, якщо пропущено) має перевагу над OR ( -o
), а додавання явного предиката дії (тут -exec
) скасовує -print
неявну дію, бачену вище. Тут ви хочете:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) \
-exec sh -c 'echo "$0"' {} \;
Або:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -exec sh -c '
for i do
echo "$i"
done' sh {} +
Щоб уникнути запуску одного sh
файлу.
*.js*
або*.txt
.