さまざまなディレクトリからファイルを削除したいbashスクリプトがあります。一般的に作成されていないので存在しませんが、大丈夫です。スクリプトがそのエラーを報告しないようにする方法はありますか?しかし、rmにエラーを報告する別の出力がある場合
または、ノイズの少ないファイルを削除するより良いコマンドがありますか?
答え1
この-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
$
答え2
あなたの要件が不足して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
答え3
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にリダイレクトするため、コマンドを実行すると表示できません。
答え4
find
あるいは、オプションと一緒にコマンドを使用できます-delete
。これは(明らかに)見つかったファイルのみを削除するため、そうでない場合は警告は発生しません。たとえば、次のようになります。
find /var/log/triffids/ -name "*.log" -mtime 30 -delete
ディレクトリが検索され、30日以上変更されていないサフィックスを含む/var/log/triffids/
すべてのファイルが削除されます。.log
常にこれらのコマンドを実行することをお勧めします。いいえ-delete
目的のファイルを見つけるには、まずこのオプションを選択します。