Biasanya untuk menghapus file dengan spasi di nama file Anda, Anda harus menjalankan:
$ rm "file name"
tetapi jika saya ingin menghapus banyak file, misalnya:
$ find . -name "*.txt" | xargs rm
Ini tidak akan menghapus file dengan spasi di dalamnya.
command-line
find
rm
xargs
Ashley
sumber
sumber
find -name "*\ *.txt" | xargs rm
berfungsi untuk dua file kata?Jawaban:
Anda dapat memberitahu
find
danxargs
untuk keduanya menggunakan terminator nolatau (lebih sederhana) gunakan
-delete
aksi bawaanfind
atau (terima kasih @kos)
salah satunya harus menghormati batas sistem
ARG_MAX
tanpa perluxargs
.sumber
ARG_MAX
saya juga akan menyebutkan bahwa itufind . -name "*.txt" -exec rm {} \;
akan menjadi "tembakan yang aman"-print0
harus menjadi opsi terakhir (atau setidaknya setelah-name "*.txt"
) jika tidak,*.txt
file ini tidak akan lagi terbatas pada ...Kebetulan, jika Anda menggunakan sesuatu selain menemukan, Anda dapat menggunakan tr untuk mengganti baris baru dengan byte nol.
Misalnya. liner berikut menghapus 10 file yang terakhir dimodifikasi dalam direktori, bahkan jika mereka memiliki spasi dalam namanya.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
sumber
Perintah xargs menggunakan tab, spasi, dan baris baru sebagai pembatas secara default. Anda bisa mengatakannya untuk hanya menggunakan karakter baris baru ('\ n') dengan opsi -d:
find . -name "*.txt" | xargs -d '\n' rm
Sumber jawaban di SO .
sumber
-0
bukannya-d
(untukxargs
) untuk sistem BSD. Apa yang digunakan Ubuntu? Jawaban yang diterima di sini menggunakan-0
. Apa yang benar