走ってみた
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