Pertanyaan Bagaimana cara menghapus semua file yang dikembalikan oleh locate


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.


13
2017-12-21 11:04


asal


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 locate. - theTuxRacer


Jawaban:


Seperti yang telah disebutkan oleh bab lain, xarg adalah teman Anda. Ini adalah alat yang sangat kuat dan saya akan mencoba menjelaskannya dan memberikan solusi untuk masalah umum.

Apa yang dilakukan oleh xargs adalah mengambil garis 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 sampai akhir dari rm -f perintah, dan dieksekusi untuk setiap baris yang dihasilkan oleh locate foobar.

Gotcha:

Tapi bagaimana jika ada spasi di baris Anda (s) dikembalikan oleh lokasi? Itu akan merusak rm -f perintah karena argumen yang dilewatkan ke rm harus berupa file (kecuali Anda menggunakan -r switch), dan file-path harus diloloskan atau dikutip jika berisi spasi.

xargs menyediakan tombol -i, ke pengganti masukan ke perintah yang mengikuti, bukan hanya menambahkannya. Jadi saya akan mengubah saran untuk

locate foobar | xargs -ixxx rm -f 'xxx'

yang sekarang hanya akan rusak jika nama file dikembalikan oleh lokasi yang mengandung tanda kutip.

Saya harus setuju dengan qbi, bahwa Anda seharusnya berhati-hati dalam menggunakan  rm -f ! Gunakan tanda -p untuk xarg, atau jalankan foobar lokasi dengan sendirinya sebelum mengisinya ke xarg, atau jatuhkan -f dari rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'

13
2017-12-21 14:17



Agar kuat terhadap file dengan karakter eksotis (baris baru, tanda kutip, apostrof, dll.) Di nama mereka, Anda dapat menggunakan -0 (--null) opsi untuk mencari dan xargs. Ini menggunakan karakter ASCII NUL yang aman untuk memisahkan nama file: locate -0 foobar | xargs -0 rm - Jukka Matilainen
Beri +1 untuk balasan, dan pilih untuk menyebutkan gotcha ^ _ ^ - theTuxRacer


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

locate foobar | xargs rm

7
2017-12-21 11:12





Untuk menghapus semua file yang dikembalikan oleh locate, keluarkan perintah berikut di terminal Anda

locate foobar | xargs rm -f


6
2017-12-21 11:09