AIXで複数のジョブの最新ログを見つけて最新のログを削除する方法

AIXで複数のジョブの最新ログを見つけて最新のログを削除する方法

私はUnixを初めて使用します。複数のジョブの最新ログを見つけて、最新のログを削除しようとしています。

これに対するシェルスクリプトを書くことはできますか?デフォルトのコマンドを試しましたが、時間範囲を選択してログを削除していますが、返品便利なログを削除してください。


私が見つけたものを共有します。

touch -t 201903281325.00 start           
touch -t 201903281331.00 stop                 
find . -newer start \! -newer stop -type f \( -name "**" -o -name "**" \) -exec rm -f {} \;

その時間内にすべてのファイルが削除されます。


私がしたいこと:

ジョブ名がA、B、Cなどで、これらのジョブが1日5回実行されるとします(例:A_1、A_2、A_3、B_1、B_2、B_3など)。

今日生成されたランニングログについて話してください。

Order_created_20190611_1.log
Order_created_20190611_2.log 
Order_created_20190611_3.log
Order_zip_rec_20190611_1.log
Order_zip_rec_20190611_2.log

自動的に削除する必要がある項目:

Order_created_20190611_3.log
Order_zip_rec_20190611_2.log

自動的に見つけて削除しOrder_created_20190611_3.logたいです。Order_zip_rec_20190611_2.log

役職の例:

  • Order_created- 役職
  • 20190611- 実行日
  • _2(最後の言及) - 実行回数。_2今日のランニングは二度目という意味だ。

ベストアンサー1

このような単純なファイル名の場合、改行文字などの奇妙な文字は含まれていないため、解析できますls(通常は。推奨しない.)

あなたの質問で説明されているように、私たちはこれらのパターンと一致するファイルを処理すると仮定します。もちろん*「すべて」が一致します。

Order_created_20190611_*.log
Order_zip_rec_20190611_*.log

また、今日の日付に基づくファイルの場合は、次のような「最新」ファイルを見つけることができます。

# Today's date in YYYYMMDD format
today="$(date +%Y%m%d)"

# Get "ls" to give us the files ordered by date modified (newest first). Pick off the first
newest="$(ls -t "Order_created_${today}_"*".log" | head -n1)"

# Show what we would delete (remove "echo" to action)
echo rm "$newest"

この原則を使用すると、複数のファイル名にわたってループにロールアップできます。

today="$(date +%Y%m%d)"
for prefix in Order_created Order_zip_rec
do
    newest="$(ls -t "${prefix}_${today}_"*".log" 2>/dev/null | head -n1)"
    [[ -f "$newest" ]] && echo rm "$newest"
done

ガイドライン

  1. 一般的にlssortfind
  2. ls一致するファイルがない場合は、エラー出力を放棄しました。
  3. rm今回も削除するファイルがある場合にのみ試しました。

おすすめ記事