Perbedaan kecepatan tidak akan signifikan.
Tetapi Anda harus memastikan bahwa:
-
Skrip Anda tidak akan berasumsi bahwa nofile akan memiliki spasi, tab, dll nama file; versi pertama aman, versi kedua tidak.
-
Skrip Anda tidak akan menangani file yang dimulai dengan "
-
" sebagai opsi.
Jadi kode Anda akan terlihat seperti ini:
find . -exec cmd -option1 -option2 -- {} +
atau
find . -print0 | xargs -0 cmd -option1 -option2 --
Versi pertama lebih pendek dan lebih mudah ditulis karena Anda dapat mengabaikan versi 1, tetapi versi kedua lebih portabel dan aman, seperti "-exec cmd {} +
" adalah opsi yang relatif baru di GNU findutils (sejak 2005, banyak sistem yang sedang berjalan belum memilikinya) dan baru-baru ini bermasalah. Juga banyak orang tidak mengetahui ini "-exec cmd {} +
", seperti yang Anda lihat dari jawaban lain.
find . | xargs cmd
lebih efisien (menjalankan cmd
sesedikit mungkin, tidak seperti exec
, yang menjalankan cmd
satu kali untuk setiap pertandingan). Namun, Anda akan mengalami masalah jika nama file mengandung spasi atau karakter yang funky.
Berikut ini disarankan untuk digunakan:
find . -print0 | xargs -0 cmd
ini akan berfungsi bahkan jika nama file berisi karakter yang funky (-print0
membuat find
cetak kecocokan yang diakhiri NUL, -0
membuat xargs
mengharapkan format ini.)
xargs
modern versinya sering kali mendukung eksekusi pipeline paralel.
Jelas itu mungkin menjadi titik pivot ketika harus memilih antara find … -exec
dan … | xargs