Dari man find
:
perintah -exec;
Jalankan perintah; true jika 0 status dikembalikan. Semua argumen berikut untuk ditemukan dianggap sebagai argumen untuk perintah sampai argumen yang terdiri dari ';' ditemui. String '{}' diganti oleh nama file saat ini sedang diproses di mana-mana itu terjadi dalam argumen ke perintah, tidak hanya dalam argumen di mana itu sendirian, seperti dalam beberapa versi find. Kedua konstruksi ini mungkin perlu diloloskan (dengan tanda '\') atau dikutip untuk melindunginya dari ekspansi oleh shell. Lihat bagian EXAMPLES dtk untuk contoh penggunaan opsi '-exec'. Perintah yang ditentukan dijalankan sekali untuk setiap file yang cocok.
Perintah dijalankan di direktori awal. Ada masalah keamanan yang tidak dapat dihindari seputar penggunaan opsi -exec;
perintah -exec {} +
Varian opsi -exec ini menjalankan perintah yang ditentukan pada file yang dipilih, tetapi baris perintah dibangun dengan menambahkan setiap nama file yang dipilih di akhir ; jumlah total doa perintah akan jauh lebih sedikit daripada jumlah file yang cocok. Baris perintah dibangun dengan cara yang sama seperti xargs membangun baris perintahnya. Hanya satu instance dari '{}' diizinkan dalam perintah. Perintah dijalankan di direktori awal.
Jadi, seperti yang saya pahami, \;
menjalankan perintah terpisah untuk setiap file yang ditemukan oleh find
, sedangkan \+
menambahkan file dan mengeksekusi satu perintah pada mereka semua. Ini \
adalah karakter pelarian, jadi:
ls testdir1; ls testdir2
vs.
ls testdir1 testdir2
Melakukan hal di atas di shell saya mencerminkan output dalam pertanyaan Anda.
contoh kapan Anda ingin menggunakannya \+
Misalkan dua file, 1.tmp
dan2.tmp
:
1.tmp:
1
2
3
2.tmp:
0
2
3
Dengan \;
:
find *.tmp -exec diff {} \;
> diff: missing operand after `1.tmp'
> diff: Try `diff --help' for more information.
> diff: missing operand after `2.tmp'
> diff: Try `diff --help' for more information.
Sedangkan jika Anda menggunakan \+
(untuk menggabungkan hasil find
):
find *.tmp -exec diff {} \+
1c1,3
< 1
---
> 0
> 2
> 30
Jadi dalam hal ini bedanya diff 1.tmp; diff 2.tmp
dandiff 1.tmp 2.tmp
Ada kasus di mana \;
sesuai dan \+
akan diperlukan. Menggunakan \+
dengan rm
adalah salah satu contohnya, di mana jika Anda menghapus sejumlah besar kinerja file (kecepatan) akan lebih unggul \;
.