Bagaimana cara menjalankan perintah pada daftar nama file dalam file?

11

Saya telah mendaftarkan nama-nama file yang akan dihapus ke dalam file. Bagaimana saya bisa meneruskan file ke rmperintah sehingga harus menghapusnya satu per satu.

monu
sumber
1
Lihat FAQ 001 di Greg's Wiki ...
jasonwryan

Jawaban:

11

Jika Anda memiliki satu file per baris, satu cara untuk melakukannya adalah:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

Daftar file diberikan sebagai input ke trperintah yang mengubah pemisah file dari linefeed ke byte nol dan xargsperintah membaca file yang dipisahkan oleh null byte pada input dan meluncurkan perintah rm dengan file yang ditambahkan sebagai argumen.

Jonas Berlin
sumber
1
Saya juga menyarankan menggunakan rm --bukan hanya rm, sehingga nama file yang dapat dimulai dengan tanda hubung tidak akan diperlakukan sebagai rmparameter.
artyom
Tidak berhasil sobat ........ tr: operan ekstra monu.txt' Try tr --help 'untuk informasi lebih lanjut. rm: operan yang hilang Coba `rm --help 'untuk informasi lebih lanjut. ........ Ini semua yang bisa saya lihat
monu
1
Apakah Anda mungkin melewatkan <sebelum nama file?
Jonas Berlin
Saya sedikit memperbaiki perintah xargs - ditambahkan - sesuai dengan saran @artyom dan menambahkan -r untuk memastikan tidak menjalankan rm jika tidak ada file yang harus dihapus.
Jonas Berlin
5

Jawaban di atas baik-baik saja karena ia berusaha keras untuk menangani nama file dengan spasi dan "karakter aneh". Tetapi cara paling sederhana, jika nama file waras, adalah adil (peringatan, bashism!):

rm $(< /the/file/with/names)

Untuk shell biasa:

rm `cat /the/file/with/names`
vonbrand
sumber