ログファイルの削除

ログファイルの削除

複数のサブフォルダーを含むフォルダーがあります。これらすべてのサブフォルダのログフォルダがあります。親ディレクトリの単一のコマンドを使用して、これらのサブディレクトリのすべてのログフォルダからすべてのログファイルを個別に消去するにはどうすればよいですか。

例えば、

Folder/
  Sub1/
    Log/
      Log1.txt
      Log2.txt
  Sub2/
    Log/
      Log10.txt
      Log11.txt

これらのログファイルを個別に消去する方法は?サブフォルダー sub1 および sub2 には、削除しない他のフォルダーといくつかのファイルを含めることができます。システムはRed Hat Linuxです。

答え1

bash globbingを使用して複数のフォルダを一致させることができます。それは次のとおりです。

rm ./Folder/*/Log/*

または、より良い方法は次のとおりです。

rm ./Folder/Sub*/Log/*

Log2番目の項目はで削除されます。Sub必要に応じて、コマンドに-r(再帰)または-f(強制)を追加できます。rm

bash globbingの詳細については、私の他の答えをチェックしてください。可変ディレクトリ名でパスを指定できますか?

logrotateこれがあなたの質問に直接答えている間、以下を使用して古いログファイルを管理することを検討することができます。http://www.linuxcommand.org/man_pages/logrotate8.html

答え2

検索コマンドは非常に強力で、資金調達対象のオブジェクトに対して操作を実行できます。

 find . -type f -name "*.txt" -exec rm -f {} \;

ご覧のとおり、このコマンドは* .txtファイルを見つけて、そのファイルに対してrmを実行します。

ログフォルダ内のファイルのみを削除するには:

find . -type d -name "Log" -exec sh -c 'find "$(realpath $1)" -type f -delete' _ {} \;

このコマンドは、すべてのログフォルダを検索し、ファイルを検索します。

答え3

この場合、タイプパラメータでfindを使用できるようです。

    find {piyush,jain} -type f
piyush/jain/logs/1.log
piyush/jain/logs/2.log
piyush/jain/logs/3.log
jain/piyush/logs/4.log
jain/piyush/logs/5.log
jain/piyush/logs/6.log

find {piyush,jain} -type f  | xargs rm -f

find {piyush,jain} -type f

答え4

ルートディレクトリでもこれを行うことができます。maxdepth3つのディレクトリを見つけること-type fは、ディレクトリが含まれていないファイルだけを見つけて削除することを意味します。

   $ find . -maxdepth 3 -type f -name "*.txt" -exec rm -f {} \;

関連情報