Locateによって返されるすべてのファイルを削除する方法


13

現時点では、彼は私がやっていることです。

ステップ1:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

ステップ2:

各行をコピーして貼り付けて、手動で削除を実行します。

rm /home/abc/fooBar
rm /home/abc/Music/fooBar

これを1ステップで行うにはどうすればよいですか?何かのようなもの

fooBarを見つける> rm

ありがとう。


これ欲しい?rm -i fooBar``見つける
LFC_fan

上記が何をするのか分かりません。Locateコマンドを実行したときに返されるパスから、すべてのファイルを削除したいだけです。
theTuxRacer

回答:


13

他の章ですでに述べたように、xargsはあなたの友達です。これは本当に強力なツールであり、私はそれを説明し、一般的な落とし穴の回避策を提供しようとします。

xargsが行うことは、入力から行を取得し、それを別のコマンドに追加し、入力内のすべての行に対してその別のコマンドを実行することです。したがって、と入力するlocate foobar | xargs rm -fと、locateコマンドの出力がコマンドの最後パッチされ、rm -fによって生成された各行に対して実行されlocate foobarます。

落とし穴:

しかし、locateによって返される行にスペースがある場合はどうでしょうか?rm -f(-rスイッチを使用しない限り)rmに渡される引数はファイルである必要があり、スペースが含まれている場合はfile-pathをエスケープまたは引用する必要があるため、コマンドは中断されます。

xargsは-iスイッチを提供し、入力を単に追加するのではなく、後続のコマンドに置き換えます。だから私は提案を変更します

locate foobar | xargs -ixxx rm -f 'xxx'

これは、locateによって返されたファイル名にアポストロフィが含まれていた場合にのみ破損します。

rm -fの使用注意する必要があることをqbiに同意する必要があります!xargsに-pフラグを使用するか、xargsに渡す前にLocate foobarを単独で実行するか、rmから-fをドロップします。

locate foobar | xargs -p -ixxx rm -f 'xxx'

9
名前に特殊文字(改行、引用符、アポストロフィなど)を含むファイルに対して堅牢にするために、-0--null)オプションを使用してxargsを検索できます。:これは、別のファイル名への安全なASCIIのNUL文字使用していますlocate -0 foobar | xargs -0 rm
ユッカMatilainen

1
返信用に+1を
取得し、注意事項に

試しましたが、うまくいきませんでした。
Pronoy999

部分的に働いていた
スティーブス

7

で使用するには、さらにオプションが必要になる場合がありますxargs。最初にそれをテストしxargs -pます。問題なければ、-pオプションを削除します。

locate foobar | xargs rm

6

Locateによって返されるすべてのファイルを削除するには、ターミナルで次のコマンドを発行します

locate foobar | xargs rm -f

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.