Apa yang dilakukan + dalam perintah find / path / -exec '{}' +?

13

Apa +di find /path/ -exec command '{}' +do? sebagai lawanfind /path/ -exec command '{}' \;

xenoterracide
sumber

Jawaban:

17

Tanda '+' membuat satu baris perintah besar dari semua file yang ditemukan untuk meminimalkan jumlah perintah yang akan dijalankan.

Mengingat bahwa perintah find menemukan empat file.

find . -type f -exec command '{}' \;

akan menghasilkan

command file1
command file2
command file3
command file4 

Di samping itu

find . -type f -exec command '{}' \+

menghasilkan

command file1 file2 file3 file4
ddeimeke
sumber
3
Jika Anda tahu xargs, -exec … {} +lakukan hal yang sama -print | xargs …, tetapi tanpa masalah mengutip ( -print0 | xargs -0adalah cara lain, tapi ini kurang portabel).
Gilles 'SANGAT berhenti menjadi jahat'
4

Dari halaman manual:

perintah -exec {} +

Varian aksi -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.

tante
sumber
1
pria yang sangat ... singkat? Saya menemukan itu kurang dalam, dan kejelasan.
xenoterracide
Idenya bukan untuk membabi buta satu proses untuk setiap file, tetapi untuk mengumpulkan nama file bersama dan memanggil perintah lebih sedikit. Contoh: alih-alih membuat 3 proses "rm FILENAME" yang berbeda, ia mengumpulkan nama file dan melakukan "rm FILE1 FILE2 FILE3".
tante
IIRC beberapa versi xargs memiliki opsi untuk mengelompokkan nama-nama ini bersama-sama hingga batas yang ditentukan, sehingga Anda dapat mengambil manfaat dari ini tetapi juga menghindari meluap ketika Anda memiliki daftar besar juga.
Kevin Cantu
(Cari sendiri adalah bahasa kecil yang menakutkan!)
Kevin Cantu
findmemberi saya semi.
Matt Alexander