すべてのサブフォルダで最新のログのみを繰り返し検索してファイルに保存する

すべてのサブフォルダで最新のログのみを繰り返し検索してファイルに保存する

私はRHEL7マシンで開発中です。特定の階層の下の各サブフォルダ内のすべての最新(最新のファイルのみ).logファイルを繰り返し見つけて、「all_logs.txt」ファイルにフルパスを一覧表示する必要があります。

私のfindコマンドは次のようになり、約6000レコードのフルパスを返します。

cd ${SEARCHDIR}
find . -iname computer_import_*.log > all_logs.txt

ここでの問題は、このfindコマンドがすべてのコンピュータ_import_を探していることです。.log最新のコンピュータのみが必要です_import_各サブフォルダーから .log ファイルを検索します。

答え1

次のコマンドを試してみましたが、うまくいきます。

find . -type f -iname "computer_import_*.log" -daystart -mtime -1 > all_logs.txt

答え2

find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 > all_logs.txt

-inameこれにより、パラメータに一致するすべてのファイルが検索され、実行後10日以内に変更が制限されます。find詳しくはマンページをご覧ください。

実行する前に、非シェル引数が解釈される-inameように引数を引用符で囲みました。findfind

これらの基準に従って返された内容を表示するには、次の手順を実行します。

find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 -exec ls -ld {} +

これは返された各ファイルに対して実行されるため、最後のls変更日が表示されます。-mtime <+-N>必要に応じて値を変更します。値は、-90過去90日以内に変更されたファイルを返します。正の値は、+9090日前に変更されたファイルを返します。

**代替説明**

見つける必要がある要件を考慮してただ最新の文書は次の場所にあります。どのそしてみんなサブディレクトリで次の操作を実行します。

find ${SEARCHDIR} -type d > /var/tmp/mydirs
while read -r line
do
    ls -alt "${line}" | grep -Ev "^(d|total)" | head -1 >> /var/tmp/mylogs
done < /var/tmp/mydirs

ls最新の変更日から最も古い変更日の順にディレクトリの内容を並べ替えます。grepディレクトリエントリとフルサイズ行が削除されます。headスキャンしているディレクトリから最初のファイル(存在する場合)を切り取ります。

関連情報