nohup.out
マウントされたファイルシステムのすべての項目を検索して削除したいと思います。
ファイル名にスペースが含まれているディレクトリとファイルがいくつかあると思います
xargs -0
。安全のためにインタラクティブに削除したいです。つまり、本当に削除したいかどうか尋ねてください。だから私はそれについて考え
rm -i
ました。xargs -p
見つかったファイル一つ一つを個別に削除したい気持ちもあります
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
メッセージが表示されたら、入力内容を読む必要があります。この方法は、xargs
stdin読み取りパラメータを使用した応答locate
と読み取りオプションの間に競合がないように機能します-p
。
ただし、コマンドは標準入力から読み取る入力も読み取ろうとしますxargs
。したがって、入力の一部を消費し、期待どおりに動作しません。rm -i
rm -i
xargs
私が望むように、どのコマンドが機能しますか?
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 {} +
-xdev
find
マウントされたファイルシステムでのみ検索します。-exec rm -i {} +
以前と同じxargs
ですが、ファイル名に特殊文字があっても問題はありません。
コマンドに問題があります。
locate -i nohup.out | xargs -0 -n 1 -p rm -i
入力区切り文字としてxargs
butを使用するように要求しましたが、出力はそうではないので、出力は1つの大きな文字列として扱われます。\0
locate
\0
\n
xargs
locate