Jawaban:
Jika nama file mengandung spasi, Anda harus menggunakan
locate -0 $something | xargs -0 rm
Dari locatehalaman manual :
-0,--nullPisahkan entri pada keluaran menggunakan karakter ASCII NUL alih-alih menulis setiap entri pada baris terpisah. Opsi ini dirancang untuk interoperabilitas dengan opsi --null dari GNU xargs (1).
atau
locate $something | while read f; do rm "$f"; done
Juga, Anda harus melindungi *.origdengan tanda kutip, untuk menghindari ekspansi shell, dan meneruskannya agar tidak tersentuh.
| while readkarena direktori home saya penuh dengan file dengan spasi.
*.orig, shell akan memperluas pola ke, katakanlah file1.orig file2.orig ...,, sehingga locatetidak akan melihat string yang tepat *.origsebagaimana mestinya.
tr '\n' '\0'.
Ini xargstidakxarg
Perintah locate *.orig | xargs rmitu benar-benar berfungsi tetapi yang terjadi adalah locatemenemukan *.origfile di tempat sampah dan rmmeludahkan kesalahan No such file or directoryketika mencoba menghapus file di tempat sampah.
loc tidak melakukan globbing, tetapi shell tidak. Shell memperluas * .orig ke apa yang ditemukannya di direktori saat ini yang cocok dengan * .orig.
Gunakan saja
locate .orig
dan jika itu membuat Anda mendapatkan apa yang Anda butuhkan
locate .orig | xargs rm
atau, seperti yang disebutkan oleh enzotib
locate -0 .orig | xargs -0 rm
jika Anda memiliki Whitespace di nama file.
Trik: Simpan semua jalur dalam file tmp. kemudian, Loop di atasnya:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt