質問

ご挨拶、

私は私のスクリプトが日次ログファイルにいくつかのチェックを行うことができるように変数にログのファイル名を格納する必要があります。彼らは名前にタイムスタンプを持っているので、これらのログは常に別の名前を持っています。現在、私はそのパイプのsed、ソート、カット、そして尾にlsコマンドを名前を出すために、ホッジpodged方法を使用しています。

CRON_LOG=$(ls -1 $LOGS_DIR/fetch_cron_{true,false}_$CRON_DATE*.log 2> /dev/null | sed 's/^[^0-9][^0-9]*\([0-9][0-9]*\).*/\1 &/' | sort -n | cut -d ' ' -f2- | tail -1 )

UPDATE:

$ CRON_DATEは、スクリプトへの引数として指定されます。ログが作成された(日)の日付です。私は、これは最新のものを取得したいので、時々、複数のログは、同じ日のために存在します。

いくつかの一般的なファイル名:
fetch_cron_false_031810090452.log
fetch_cron_true_031310090001.log
等...

これがあるとして動作することを覚えておいてください。私はちょうどそれが醜いだと思うし、それをやってのけるためのより良い方法を見つけようとしています。

私は数ヶ月前にGoogleのを発見したいくつかのものから、一緒にこれをklugedかなり確信しています。それが動作するようになりましたが、私は技術では本当に満足していません。私はこれより良いを行う方法についていくつかのアイデアを持っているが、私は前にこのサイト上で大きな成功を持っていたし、それが最初のstackoverflowの神々を参照するのが最善かもしれないと思っています。すべての回答が大幅に高く評価されます。

おかげで、 ライアン

役に立ちましたか?

解決

どの程度

CRON_LOG=$(ls -c $LOGS_DIR/fetch_cron_*$CRON_DATE* | head -1)

編集のあなたが右のBTAだ、私はそれをキャッチしている必要があります。修正しました。

他のヒント

は、ログファイルを解析した後、そのような名前を変更または別のフォルダに移動し、処理されたことをマークするために何かをします。ファイルが作成されたときに、この方法は、それはまだ解析されていないだけで、問題はありません。

私はまた、より高いレベルのスクリプト言語を使用することをお勧めします。

#!/bin/bash
shopt -s nullglob

last=
for file in "$LOGS_DIR"/fetch_cron_{false,true}_"$CRON_DATE"*.log
do
  last="$file"
done

if [ -n "$last" ]
then
  echo "$last"
else
  echo "No match found" >&2
  exit 1
fi

手始めに、しようとします:

FILELIST=`ls -1 $LOGS_DIR/fetch_cron_{true,false}_$CRON_DATE*.log`
CRON_LOG=`echo $FILELIST | tr -d [:alpha:][:punct:] | sort -n | tail -1`

これはcutを取り除くとより多くの可読(IMO)sedするために呼び出すためtr正規表現を取引されます。 2行にそれを分割するだけでなく明快に役立ちます。

あなたは(あなたが自分のフォルダに問題のログを維持する場合、通常は起こります)非常に類似したファイル名を持つ$LOGS_DIR内の他のファイルがない場合は、

、あなたはlsのような単純なもので$LOGS_DIR/fetch_*_$CRON_DATE*.logするためのパラメータを置き換えることができます。簡略化のために、あなたが必要なファイルのみを取得確保するために必要以上に複雑なその行をすることはありません。

あなたが、その後、前の年の接頭辞によってソートするためにあなたの日付を変更することができます。

CRON_LOG=$(ls ${LOGS_DIR}/fetch_cron_{false,true}_${CRON_DATE}*.log| tail -1)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top