Exec memungkinkan kita untuk melewati semua argumen sekaligus dengan {} +
atau meneruskannya satu per satu dengan{} \;
Sekarang katakanlah saya ingin mengganti nama semua jpeg , tidak masalah melakukan ini:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Tetapi jika saya perlu mengarahkan ulang output, '{}'
tidak dapat diakses setelah pengalihan.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Ini tidak akan berhasil. Saya harus menggunakan for for, menyimpan output find ke dalam variabel sebelum menggunakannya. Mari kita akui, itu merepotkan.
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Jadi adakah cara yang lebih baik?
{}
muncul dalam string yang lebih panjang karena string seperti itu biasanya tidak diperluas.
find
, satu kali, dan diterapkan pada find
perintah itu sendiri. Tidak {}
memiliki makna khusus dalam konteks itu. Pengalihan bukan argumen untuk find
, dan tentu saja bukan bagian dari -exec
klausa.
>
hilang dalam sampel kode ketiga?