ファイルが失われた場合、rmは報告しませんか?

ファイルが失われた場合、rmは報告しませんか?

さまざまなディレクトリからファイルを削除したい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目的のファイルを見つけるには、まずこのオプションを選択します。

関連情報