ファイル名の日付と時刻に基づいてファイルを一覧表示する

ファイル名の日付と時刻に基づいてファイルを一覧表示する

UNIXでタスクを自動化してスクリプトを作成したいです。

毎日2つのファイルが表示されるディレクトリがあり、これらのファイルは午後10時から午前1時の間にいつでも表示されます。

ファイル名はbatm53_20131025_BARC5300001201310240000000200004233.221341696408

ファイル名が3つの部分で構成されている場合:

  1. batm53は定数です
  2. ファイルがディレクトリに到着した日付
  3. この部分は BARC5300001201310170000000200004233.221341696408 です。ここで、BAR5300001 は定数であり、ファイルの日付以降です。

今日が10月24日で午前1時以降にファイルが表示されると仮定すると、ファイル名の2番目の部分は10月25日を示しますが、BAR5300001の次の3番目の部分は10月24日の日付(20131024)を表示します。

この状況で問題が発生しました。ファイルが午後10時から午前12時の間に表示される場合は、findコマンドを使用してスクリプトを簡単に作成できますが、その部分を作成するのに問題があります。ファイルは前の日付でなければならず、午前12時以降に日付を変更する必要があるため、午前12時以降にファイルが到着したかどうかを確認できますか?

ベストアンサー1

午前12時に「temp」ファイルを作成し、最新のファイルを見つけてその日にそのファイルの名前を変更できます。

たとえば、

ステップ1

午前12時以降にファイルを生成するには、次のコマンドを使用します。

$ touch -d "$(date +%F)" temp.file

touch2013年10月26日に実行した場合、ファイルの日付は「Oct 26 00:00」になります。

ステップ2

必要に応じて古い日付をファイルに設定し、古い日付を取得する変数を作成します。

$ Yesterday=$(date +%Y%m%d -d '1 day ago')

メモ:(これを行うと、変数に「20131025」の値が格納されます。)

ステップ3

temp.fileこれで、作成したファイルよりも最新のファイルを見つけることができます。

$ find . -type f -newer temp.file

わかりました。昼12時以降に生成されたファイルを存分に視聴してみてください。では、名前を以前の日付に変更しますか?

$ find . -type f -newer temp.file | \
    awk -v y=$Yesterday '{split($0,arr,"_"); \
    print "mv -v --",$0, arr[1]"_"y"_"arr[3]}'

上記のコマンドは、最初のファイルが元のファイル名で、2番目のファイルが必要なファイルである出力を印刷します。

出力が良く見えると思われる場合は、| sh同じコマンドに追加してください。

$ find . -type f -newer temp.file | \
    awk -v y=$Yesterday '{split($0,arr,"_"); \
    print "mv -v --",$0, arr[1]"_"y"_"arr[3]}' | sh

これにより、2 番目の部分の前の日付を使用してファイル名が変更されます。したがって、上記のコマンドの助けを借りてスクリプトを生成し、cronを使用して12:00以降に実行できます。

おすすめ記事