Seperti bab-bab lainnya telah sebutkan, xargs adalah teman Anda. Ini adalah alat yang sangat kuat dan saya akan mencoba menjelaskannya dan memberikan solusi untuk gotcha umum.
Apa yang dilakukan xargs adalah mengambil baris dari input, dan menambahkannya ke perintah lain, mengeksekusi perintah lain untuk setiap baris dalam input. Jadi dengan mengetik locate foobar | xargs rm -f
, output dari perintah locate akan ditambal ke akhir dari rm -f
perintah, dan dieksekusi untuk setiap baris yang dihasilkan oleh locate foobar
.
Gotcha:
Tetapi bagaimana jika ada spasi di baris Anda yang dikembalikan oleh loc? Itu akan melanggar rm -f
perintah karena argumen yang diteruskan ke rm harus berupa file (kecuali jika Anda menggunakan -r switch), dan path file perlu diloloskan atau dikutip jika mengandung spasi.
xargs menyediakan -i switch, untuk menggantikan input ke dalam perintah yang mengikuti alih-alih hanya menambahkannya. Jadi saya akan mengubah saran menjadi
locate foobar | xargs -ixxx rm -f 'xxx'
yang sekarang hanya akan rusak jika nama file dikembalikan dengan mencari apostrof yang terkandung.
Saya harus setuju dengan qbi, bahwa Anda harus berhati-hati dalam menggunakan rm -f ! Gunakan flag -p untuk xargs, atau jalankan saja locat foobar dengan sendirinya sebelum mengumpankannya ke xargs, atau jatuhkan -f dari rm.
locate foobar | xargs -p -ixxx rm -f 'xxx'
rm -i
cari fooBar``