回答:
-f
オプションを使用します。存在しないファイルを静かに無視します。
からman rm
:
-f, --force
ignore nonexistent files and arguments, never prompt
[「プロンプトなし」の部分は、(a)-f
以前に指定されたオプション-i
または-I
オプションをオーバーライドし、(b)書き込み保護されたファイルは確認せずに削除されることを意味します。]
がなければ-f
、rm
ファイルが見つからないことについて文句を言うでしょう:
$ rm nonesuch
rm: cannot remove ‘nonesuch’: No such file or directory
で-f
、それは沈黙します:
$ rm -f nonesuch
$
あなたの要件がrm
ファイルの欠落について文句を言わないが、からの他の出力も必要とする場合rm
、私の提案は、ターゲットファイルの存在を最初にテストし、ファイルが実際に存在する場合にのみrm
(フラグなしで-f
)呼び出すことです。
# rest of script
# ...
[ -e "$file" ] && rm "$file"
# ...
# rest of script
rm -f
たとえば、ユーザー書き込み権限がないファイルを呼び出すと、ファイルが削除されますし、また、そのシナリオの通常のプロンプトを放出しません。
同じアイデアを複数のファイルで使用したい場合、次のような関数定義を作成します。
qrm() {
for f
do
[ -e "$f" ] && rm "$f"
done
}
次のように使用します。 qrm file1 file2-does-not-exist *.txt etc here
rm
コマンドを実行するとき、コマンドから他の出力を見たいと述べましたが、-f
オプションを使用すると、それらを抑制します。STDERRをフィルタリングして必要なものを見つける必要がありますが、他のすべてを表示したい場合は少し注意が必要です。
次のようなコマンドを使用します。
rm -f filename 3>&1 1>&2 2>&3 3>&- | grep -v 'No such file or directory'
コマンドの説明:
-f
引数は確認またはエラーのプロンプトではなく、強制的に通過することです3>&1 1>&2 2>&3 3>&-
フィルタリングのためにSTDOUTとSTDERRを切り替えることです(詳細についてはこちらをご覧ください応じ| grep -v 'No such file or directory'
表示したくないメッセージを除外していますこれで、エラーメッセージを完全に抑制したい場合は、次のコマンドを実行できます。
rm filename 2> /dev/null
このコマンドは、STDERRを/ dev / nullにリダイレクトするため、コマンドを実行しても表示されません。
rm
せず-v
、stderrのみであるため、この場合2>&1 | grep
は、より一般的に有用なダンスなしで実行できます
別の方法として、オプションを指定してfind
コマンドを使用でき-delete
ます。これは(明らかに)見つかったファイルのみを削除するので、ファイルがない場合は警告しません。例は次のとおりです。
find /var/log/triffids/ -name "*.log" -mtime 30 -delete
/var/log/triffids/
ディレクトリを検索し、.log
30日以上変更されていない接尾辞を持つすべてのファイルを削除します。
これらのコマンドを実行することは常に良い考えであるなし-delete
を確認してください、それはあなたが期待するファイルを見つけることだ作るために、最初のオプション。
-f
manページによると、そのまま使用できます。
ファイルの許可に関係なく、確認を求めずにファイルを削除しようとします。ファイルが存在しない場合は、診断メッセージを表示したり、エラーを反映するために終了ステータスを変更したりしないでください。-fオプションは、以前の-iオプションをオーバーライドすることも覚えておいてください。
rm -f xyz-directory
何も促されず、あなたが望むことを正確に行います。