Cara menghapus semua file yang dikembalikan oleh temukan

13

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.

theTuxRacer
sumber
Apakah anda menginginkan ini? rm -i cari fooBar``
LFC_fan
Saya tidak yakin apa yang dilakukan di atas. Saya hanya ingin menghapus semua file, dari jalur yang dikembalikan ketika saya menjalankan perintah loc.
theTuxRacer

Jawaban:

13

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 -fperintah, 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 -fperintah 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'
finley
sumber
9
Agar tangguh terhadap file dengan karakter eksotis (baris baru, tanda kutip, tanda kutip, dll.) Dalam namanya, Anda dapat menggunakan opsi -0( --null) untuk mencari dan xarg. Ini menggunakan karakter ASCII NUL yang aman untuk memisahkan nama file:locate -0 foobar | xargs -0 rm
Jukka Matilainen
1
+1 untuk balasannya, dan dipilih untuk menyebutkan gotcha ^ _ ^
theTuxRacer
Saya mencobanya tetapi tidak berhasil.
Pronoy999
Bekerja sebagian
SteveS
7

Anda mungkin perlu lebih banyak opsi untuk digunakan xargs. Uji dulu dengan xargs -p. Jika OK, hapus -popsi:

locate foobar | xargs rm
qbi
sumber
6

Untuk menghapus semua file yang dikembalikan oleh temukan, jalankan perintah berikut di terminal Anda

locate foobar | xargs rm -f

karthick87
sumber