走ってみた
locate *.orig | xargs rm
しかしそれは言った No such file or directory
私はそれを行う方法を見てきましたfind
が、locateはオブジェクトへのフルパスを返すので、それは可能であるべきです
走ってみた
locate *.orig | xargs rm
しかしそれは言った No such file or directory
私はそれを行う方法を見てきましたfind
が、locateはオブジェクトへのフルパスを返すので、それは可能であるべきです
回答:
ファイル名にスペースが含まれている場合は、使用する必要があります
locate -0 $something | xargs -0 rm
-0
、--null
各エントリを別々の行に書き込むのではなく、ASCII NUL文字を使用して出力のエントリを区切ります。このオプションは、GNU xargs(1)の--nullオプションとの相互運用性のために設計されています。
または
locate $something | while read f; do rm "$f"; done
また、*.orig
シェル展開を回避するために引用符で保護し、それをそのままの場所に渡す必要があります。
| while read
私のホームディレクトリはスペースのあるファイルでいっぱいなので常に使用します。
*.orig
に対応するファイルがある場合、シェルはパターンをに拡張するfile1.orig file2.orig ...
ためlocate
、正確な文字列が正しく表示されません*.orig
。
tr '\n' '\0'
。
そうでxargs
はないxarg
コマンドlocate *.orig | xargs rm
は実際には機能しますが、起こっていたのは、ゴミ箱にあるファイルをlocate
見つけ*.orig
て、ゴミ箱にあるファイルを削除しようとしたときrm
にエラーを吐き出すNo such file or directory
ことでした。
トリック:すべてのパスをtmpファイルに保存します。次に、ループします:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt