GNU/Linux >> Belajar Linux >  >> Linux

temukan -exec cmd {} + vs | xargs

Perbedaan kecepatan tidak akan signifikan.

Tetapi Anda harus memastikan bahwa:

  1. Skrip Anda tidak akan berasumsi bahwa nofile akan memiliki spasi, tab, dll nama file; versi pertama aman, versi kedua tidak.

  2. 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


Linux
  1. Temukan -exec + Vs Temukan | Xargs:Yang Mana Yang Harus Dipilih?

  2. Mencetak Nama File Bersama Dengan Hasil Grep Di Temukan -exec?

  3. Keluar Dari Temukan Jika -exec Gagal?

  1. Memformat Ulang Sejumlah Besar File Xml?

  2. temukan dan salin file menggunakan Bash

  3. temukan -exec fungsi shell di Linux?

  1. Menggunakan nama dasar dan path lengkap di find -exec

  2. Bagaimana cara menjalankan banyak perintah saat menggunakan find?

  3. temukan:-exec rm {} \; vs. -delete - mengapa yang pertama direkomendasikan secara luas?