Sintaksnya adalah:
find ... -exec cmd {} +
findakan menemukan sejumlah file berdasarkan kriteria di ...dan dijalankan cmddengan daftar jalur file sebagai argumen, sebanyak mungkin tanpa melampaui batas pada ukuran argumen ke perintah.
Jika perlu dapat membagi daftar file dan memanggil cmdbeberapa kali. Misalnya, ini mungkin berakhir dengan panggilan:
cmd ./file1 ./file2 ... ./file3000
cmd ./file3001 ./file3002 ... ./file4321
Keterbatasan dengan itu adalah yang {}terakhir. Misalnya, Anda tidak dapat menulis:
find ... -exec cmd {} other args +
seperti yang Anda bisa dengan ';'bukan '+'.
Kamu bisa menulis:
find ... -exec echo foo {} +
tapi tidak:
find ... -exec echo {} foo +
Jadi, jika Anda perlu menambahkan beberapa argumen tambahan cmdsetelah daftar file, Anda harus menggunakan shell. (Alasan lain mengapa Anda perlu memanggil shell adalah kapan saja Anda perlu menggunakan fitur shell seperti pengalihan, pipa, beberapa ekspansi string ....)
Dalam sh -c 'inline-script' x a b c, untuk inline-script, $0adalah x, $1adalah a, $2adalah b... demikian "$@"juga daftar 3 argumen: a, b dan c. Jadi di:
find ... -exec sh -c 'cmd "$@" other arg' find-sh {} +
Untuk skrip inline , $0(yang digunakan misalnya saat menampilkan pesan kesalahan) diatur ke find-shdan "$@"merupakan daftar file (apa yang finddiperluas {}ke).
Dengan menggunakan execbuiltin khusus dari shell:
find ... -exec sh -c 'exec cmd "$@" other arg' find-sh {} +
Kami memberi tahu shell untuk tidak melakukan proses tambahan untuk menjalankan cmd, tetapi sebaliknya menjalankannya dalam proses yang sama (mengganti proses shell yang berjalan dengan perintah itu). Beberapa shell suka bash, zshdan beberapa implementasi kshmelakukannya secara implisit untuk perintah terakhir dalam sebuah skrip.
-exec sh -c '(cmd1; cmd2;)' find-sh {} +?