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