私は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
ように引数を引用符で囲みました。find
find
これらの基準に従って返された内容を表示するには、次の手順を実行します。
find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 -exec ls -ld {} +
これは返された各ファイルに対して実行されるため、最後のls
変更日が表示されます。-mtime <+-N>
必要に応じて値を変更します。値は、-90
過去90日以内に変更されたファイルを返します。正の値は、+90
90日前に変更されたファイルを返します。
**代替説明**
見つける必要がある要件を考慮してただ最新の文書は次の場所にあります。どのそしてみんなサブディレクトリで次の操作を実行します。
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
スキャンしているディレクトリから最初のファイル(存在する場合)を切り取ります。