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 findperintah itu sendiri. Tidak {}memiliki makna khusus dalam konteks itu. Pengalihan bukan argumen untuk find, dan tentu saja bukan bagian dari -execklausa.
>hilang dalam sampel kode ketiga?