現時点では、彼は私がやっていることです。
ステップ1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
ステップ2:
各行をコピーして貼り付けて、手動で削除を実行します。
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
これを1ステップで行うにはどうすればよいですか?何かのようなもの
fooBarを見つける> rm
ありがとう。
現時点では、彼は私がやっていることです。
ステップ1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
ステップ2:
各行をコピーして貼り付けて、手動で削除を実行します。
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
これを1ステップで行うにはどうすればよいですか?何かのようなもの
fooBarを見つける> rm
ありがとう。
回答:
他の章ですでに述べたように、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'
-0
(--null
)オプションを使用してxargsを検索できます。:これは、別のファイル名への安全なASCIIのNUL文字使用していますlocate -0 foobar | xargs -0 rm
Locateによって返されるすべてのファイルを削除するには、ターミナルで次のコマンドを発行します
locate foobar | xargs rm -f
rm -i
fooBar``見つける