Saat ini adalah apa yang saya lakukan:
Langkah 1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
Langkah 2:
Secara manual melakukan penghapusan, dengan menyalin-menempel setiap baris.
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
Bagaimana saya melakukan ini dalam satu langkah? Sesuatu seperti
cari fooBar> rm
Terima kasih.
command-line
pipe
theTuxRacer
sumber
sumber
rm -i
cari fooBar``Jawaban:
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 darirm -f
perintah, dan dieksekusi untuk setiap baris yang dihasilkan olehlocate 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
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.
sumber
-0
(--null
) untuk mencari dan xarg. Ini menggunakan karakter ASCII NUL yang aman untuk memisahkan nama file:locate -0 foobar | xargs -0 rm
Anda mungkin perlu lebih banyak opsi untuk digunakan
xargs
. Uji dulu denganxargs -p
. Jika OK, hapus-p
opsi:sumber
Untuk menghapus semua file yang dikembalikan oleh temukan, jalankan perintah berikut di terminal Anda
locate foobar | xargs rm -f
sumber