web-dev-qa-db-ja.com

locateの結果をrmにパイプする

走ってみた

locate *.orig | xargs rm

しかし、それはNo such file or directoryと言った

私はfindでそれを行う方法を見てきましたが、locateはオブジェクトへのフルパスを返すので可能です

10
soldier.moth

ファイル名にスペースが含まれている場合は、使用する必要があります

locate -0 $something | xargs -0 rm

locate manページ から:

-0--null各エントリを個別の行に書き込む代わりに、ASCII NUL文字を使用して出力のエントリを区切ります。このオプションは、GNU xargs(1)の--nullオプションとの相互運用性のために設計されています。

または

locate $something | while read f; do rm "$f"; done

また、*.origを引用符で保護して、シェルの展開を回避し、それをそのままの場所に渡す必要があります。

20
enzotib

xargsではなくxargです

2
maco

コマンドlocate *.orig | xargs rmは実際に動作しますが、起こっていたのは、locateがゴミ箱に*.origファイルを見つけていて、rmがエラーを吐き出すNo such file or directoryゴミ箱内のファイルを削除します。

0
soldier.moth

locateはグロビングを行いませんが、Shellは行います。シェルは* .origを、現在のディレクトリで* .origに一致するものに展開します。

ただ使う

locate .orig

そして、それがあなたが必要なものを得るなら

locate .orig | xargs rm

または、エンゾチブが述べたように

locate -0 .orig | xargs -0 rm

ファイル名に空白が含まれている場合。

0
user unknown

秘::すべてのパスを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 
0
Abdennour TOUMI