Jawaban:
Jika nama file mengandung spasi, Anda harus menggunakan
locate -0 $something | xargs -0 rm
Dari locate
halaman manual :
-0
,--null
Pisahkan 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 *.orig
dengan tanda kutip, untuk menghindari ekspansi shell, dan meneruskannya agar tidak tersentuh.
| while read
karena direktori home saya penuh dengan file dengan spasi.
*.orig
, shell akan memperluas pola ke, katakanlah file1.orig file2.orig ...
,, sehingga locate
tidak akan melihat string yang tepat *.orig
sebagaimana mestinya.
tr '\n' '\0'
.
Ini xargs
tidakxarg
Perintah locate *.orig | xargs rm
itu benar-benar berfungsi tetapi yang terjadi adalah locate
menemukan *.orig
file di tempat sampah dan rm
meludahkan kesalahan No such file or directory
ketika 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