Bagaimana cara menerapkan perintah ke daftar file dengan spasi yang dihasilkan oleh perintah lain?

0

Katakanlah saya punya perintah pipa seperti ini:

$ ls -t|tail -n 10

Sekarang jika saya ingin menghapus semua file yang dihasilkan oleh perintah di atas, jika file memiliki spasi, itu tidak akan berfungsi:

$ rm `ls -t|tail -n 10`
# assuming the first response is 'The File Name', I get:
rm: cannot remove ‘The’: No such file or directory
rm: cannot remove ‘File’: No such file or directory
rm: cannot remove ‘Name’: No such file or directory

Bagaimana saya bisa mengutip nama file sebelum mengirimnya ke rm?

Yang satu
sumber
Anda ingin mengatur IFS ke sesuatu yang lain daripada spasi.
Hennes
@ Henry IFS='\n' rm `ls the*` ,?
TheOne
Itu bisa berhasil. IFS adalah 'Pemisah File Internal'. Defaultnya adalah spasi. Anda dapat mengaturnya ke karakter apa saja. Baris baru ('\ n') dan null (IFS = $ '\ 0') adalah opsi yang paling sering digunakan. (Seringkali dikombinasikan dengan find -print0. - Namun pilihan terbaik tergantung pada apa yang Anda coba lakukan, dan contoh Anda "ls | cut -d '' -f 3 | sort | etc ..." adalah tidak jelas bagi saya untuk berkomentar tentang itu
Hennes
$ IFS = '\ n' 'rm apakah *' memberi saya:rm: cannot remove ‘the file\nthe file2\nthe file3’: No such file or directory
TheOne
Untuk hanya menghapus saya akan menggunakan sesuatu seperti ini: find /path/to/dir -name *.avi -delete {} \;. Itu terlihat seperti solusi untuk tujuan Anda, tetapi tidak satu untuk pertanyaan yang diajukan di OP.
Hennes

Jawaban:

1

Coba yang ini:

perintah yang menampilkan file dengan spasi | sedangkan IFS = baca -r file
melakukan
  rm "$ file"
Selesai

Input akan dibagi pada baris baru, sehingga file dengan baris baru pada namanya tidak akan berfungsi. Mengutip nama dengan spasi berfungsi tanpa masalah.

Peter
sumber
Tidak demikian untuk backslash. Kutipannya OK selama Anda menggunakan sementara (yang Anda lakukan dengan benar), itu akan memutuskan for.
terdon
@ Peter, ada cara yang sama tanpa loop?
TheOne
@ Absolute0, Anda dapat menghindari loop dengan mengutip perintah seperti yang dijelaskan dalam jawaban saya. Ini bukan ide yang baik, loop lebih aman jika berhadapan dengan karakter aneh.
terdon
@ Absolute0 Apakah ini benar-benar berhasil untuk Anda? Jika file berisi spasi, itu bahkan tidak akan melewati dengan cut -d ' 'benar.
slhck
Sslhck, saya sebenarnya tidak menggunakan cut - saya mencoba untuk merumuskan beberapa perintah yang kompleks. Seharusnya pergi dengan perintah saya yang sebenarnya.
TheOne