〜750個のログディレクトリがあり、利用可能な最新のログファイルを検索する必要があります。
これはallLogs.txtファイルとしてキャプチャされ、各エントリにはワイルドカード "*"が含まれており、最新の日付のログのみがクロールされます(日付が異なり、同じ名前のログが多数ある場合があります)。
import_Asbeg_DA_Config3_*.log
import_test_deploy_*.log
import_Plus_DQ_Config1_*.log
たとえば、これは良くないことがわかりますが、目標を達成するためのループには非常に効果的です。
for LATEST in `cat allLogs.txt` ;
do
find -name "${LATEST}" -type f | sort -n | tail -1
done < infile > outfile
すべてのディレクトリにログファイルがない可能性があるため、約350レコードを探します。
"allLogs.txt"には、このディレクトリのログファイルへの〜750のパスがすべて含まれています。
このコマンドをループで実行しているときにログファイルが見つからない場合でも、一貫性を維持する方法を見つけたいと思います。ログファイルを含まないレコードに「invalid」を追加することもできます。私はechoとfindコマンドの組み合わせを試しましたが、成功しませんでした。どんなアイデアがありますか?
ベストアンサー1
あなたの質問によると、あなたが実際に要求するのは、ディレクトリ内の最新のファイルを印刷することです(ディレクトリにファイルがある場合)。ディレクトリにファイルがない場合は、INVALID などの内容を印刷します。
上記の要約が正しい場合は、ループにif句を追加して、そのディレクトリを表示したときに1行しか出力されないことを確認できます。一行だけあればそれが目次です。したがって、文書はありません。その後、ループ内の他のコマンドをスキップしてリスト内の次の項目を続行できます。
更新されたスクリプトは次のとおりです。
#!/bin/bash
for LATEST in $(cat allLogs.txt); do
if [[ $(find ${LATEST} -print | wc -l) -eq 1 ]]; then
echo "${LATEST} has no files"
continue
fi
find ${LATEST} -type f | sort -n | tail -1
done
exit 0
INVALIDを印刷するディレクトリがわからないので、INVALIDを印刷したくありません。
ループの標準入力をリダイレクトする理由が何であるかよくわかりません。 stdoutをリダイレクトしませんが、追加するのは簡単です。