Temukan . -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt"
kependekan dari:
Temukan . \ (\ ( -type f -a -name "* .htm *" \) -o \
\ ( -nama "* .js *" \) -o \
\ ( -nama "* .txt" \) \
\) -sebuah cetak
Yaitu, karena tidak ada predikat tindakan yang ditentukan (hanya kondisi ), suatu -print
tindakan ditambahkan secara implisit untuk file yang cocok dengan kondisi tersebut.
(dan, omong-omong, itu akan mencetak .js
file tidak biasa ( -type f
hanya berlaku untuk .htm
file)).
Sementara:
Temukan . -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt" \
-exec sh -c 'echo "$ 0"' {} \;
kependekan dari:
Temukan . \ ( -type f -a -name "* .htm *" \) -o \
\ ( -nama "* .js *" \) -o \
\ ( -nama "* .txt" -a -exec sh -c 'echo "$ 0"' {} \; \)
Karena find
(seperti dalam banyak bahasa), AND ( -a
; implisit ketika dihilangkan) memiliki prioritas di atas OR ( -o
), dan menambahkan predikat tindakan eksplisit (di sini -exec
) membatalkan -print
tindakan implisit yang terlihat di atas. Di sini, Anda ingin:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) \
-exec sh -c 'echo "$0"' {} \;
Atau:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -exec sh -c '
for i do
echo "$i"
done' sh {} +
Untuk menghindari menjalankan satu sh
per file.
*.js*
atau*.txt
.