安全にファイルの検索と削除

安全にファイルの検索と削除

nohup.outマウントされたファイルシステムのすべての項目を検索して削除したいと思います。

  1. ファイル名にスペースが含まれているディレクトリとファイルがいくつかあると思いますxargs -0

  2. 安全のためにインタラクティブに削除したいです。つまり、本当に削除したいかどうか尋ねてください。だから私はそれについて考えrm -iました。xargs -p

  3. 見つかったファイル一つ一つを個別に削除したい気持ちもありますxargs -n 1

しかし、以下のコマンドは私が望むように動作しません。

locate  -i nohup.out | xargs -0 -n 1 -p rm -i

各ファイルを削除して権限を要求するプロンプトは表示されません。

なぜそしてどのコマンドが好きなように動作するのか知りたいです。

ちなみに、私のxargsのバージョンはxargs(GNU findutils)4.4.2です。これが理由なのでしょうか?

答え1

使用findしないlocate

find . -name "nohup.out" | xargs -n 1 -p rm

追加時にプロンプ​​トへrm -iの入力として機能します。-p

findこの方法を使用することもできます

find . -name "nohup.out" -exec rm -i {} \;

答え2

しかし、以下のコマンドは私が望むように動作しません。

locate -i nohup.out | xargs -0 -n 1 -p rm -i

もちろん、1つを使用している場合はxargs -0一致する必要がありますlocate -0

各ファイルを削除して権限を要求するプロンプトは表示されません。理由を知りたい

xargs/dev/ttyメッセージが表示されたら、入力内容を読む必要があります。この方法は、xargsstdin読み取りパラメータを使用した応答locateと読み取りオプションの間に競合がないように機能します-p

ただし、コマンドは標準入力から読み取る入力も読み取ろうとしますxargs。したがって、入力の一部を消費し、期待どおりに動作しません。rm -irm -ixargs

私が望むように、どのコマンドが機能しますか?

Bashを使用している場合は、次のオプションがあります。

xargs -a <(locate -0 -i nohup.out) -0 -n 1 -p rm -i

ただし、findですべての操作を実行できます。

find / -depth -name nohup.out -ok rm -i '{}' ';'

複数のファイルを一度に削除するには、 ';'を '+'に変更します。この要件とこの問題を解決するさまざまな方法については、以下で説明します。findutils 用 Texinfo マニュアル

答え3

インタラクティブな動作を望み、プロンプトでxargsを使用するには、次のようにします。

locate  -i nohup.out | xargs -d '\n' -L1 -p rm

答え4

POSIX的に:

find /path/to/mounted_fs -xdev -type f -name nohup.out -exec rm -i {} +

-xdevfindマウントされたファイルシステムでのみ検索します。-exec rm -i {} +以前と同じxargsですが、ファイル名に特殊文字があっても問題はありません。


コマンドに問題があります。

locate -i nohup.out | xargs -0 -n 1 -p rm -i

入力区切り文字としてxargsbutを使用するように要求しましたが、出力はそうではないので、出力は1つの大きな文字列として扱われます。\0locate\0\nxargslocate

関連情報