複数のサブフォルダーを含むフォルダーがあります。これらすべてのサブフォルダのログフォルダがあります。親ディレクトリの単一のコマンドを使用して、これらのサブディレクトリのすべてのログフォルダからすべてのログファイルを個別に消去するにはどうすればよいですか。
例えば、
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/*
Log
2番目の項目はで削除されます。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
ルートディレクトリでもこれを行うことができます。maxdepth
3つのディレクトリを見つけること-type f
は、ディレクトリが含まれていないファイルだけを見つけて削除することを意味します。
$ find . -maxdepth 3 -type f -name "*.txt" -exec rm -f {} \;