Tampaknya ada sejumlah cara untuk melakukan ini termasuk loop di skrip shell, find dan xargs. Yang mana yang terbaik, dan mana yang paling portabel?
command-line
scripting
directory
find
Brian Lyttle
sumber
sumber
-name "*.c"
atau misalnya-type d
untuk direktori ...find ... | xargs ...
idiom, itu memproses file dalam batch, dan ini biasanya akan lebih cepat (lebih sedikit proses diluncurkan).Gunakan
-print0
opsi untuk menemukan dan-0
opsi untukxargs
jika Anda memiliki nama file atau direktori dengan spasi:The
-print0
pilihan untuk menemukan print nama file sebagaiNUL
-separated daripada spasi daftar dipisahkan, sedangkan-0
pilihan untukxargs
menginstruksikan untuk istirahat masukan padaNUL
daripada spasi. KarenaNUL
adalah salah satu karakter yang tidak diperbolehkan dalam nama file Unix, tidak ada cara untuk itu dikira sebagai bagian dari nama file.The
-r
pilihan adalah ada sehinggaxargs
tidak akan memberikan Anda sebuah kesalahan jika tidak memiliki masukan.sumber
Jika portabilitas adalah masalah saya akan tinggal jauh dari cara-cara khusus untuk melakukannya (ada banyak orang menggunakan banyak shell yang berbeda, tetapi secara umum menemukan dan xargs adalah alat yang benar-benar dasar yang tidak ada yang berani berubah secara radikal) .
Menggunakan argumen dasar find dan xargs akan memberi Anda solusi yang lebih portabel.
sumber
Jika pengelompokan argumen bersama dapat diterima, temukan | xargs mungkin akan memberikan kinerja yang lebih baik, karena ia akan mengeksekusi perintah jauh lebih sedikit daripada menemukan -exec. Jika Anda ingin mengeksekusi perintah setiap kali untuk setiap file atau mengeksekusi di subdirektori file Anda mungkin harus menggunakan find -exec atau -execdir.
Sebagai aturan, lebih baik untuk menghindari loop khusus shell; find & xargs cukup untuk sebagian besar skenario.
sumber
Pastikan versi perintah yang Anda gunakan belum memiliki flag untuk operasi rekursif. :)
sumber
Berfungsi terbaik untuk saya.
sumber