スクリプト - ファイル名の日付を現在の日付と比較する

スクリプト - ファイル名の日付を現在の日付と比較する

名前に日付を含むファイルをシステムの現在の日付と時刻と比較しようとしています。

ファイル名は次の形式に従います。

ファイル名.yyyymmdd.hhmm.file(例:File156tr.20220914.0958.txt)

私は次のスクリプトを思いついた。

#!/bin/bash

FROM_FILE=$(ls -1 /some/directory/File156tr.*.*.txt | grep -Eo '[[:digit:]]{8}')
NOW=$(date +"%Y%m%d")
DIFFERENCE=$((NOW - FROM_FILE))

if [ $DIFFERENCE -ge 1 ]; then
    echo "There are files that are older than today's date"
fi

問題は、その種類のファイルが1つしかない場合、スクリプトが完全に機能することです。しかし、例えば、ファイルは同じですが、日付名が異なります。 (たとえば、同じディレクトリにあるFile156tr.20220913.1053.txtおよびFile156tr.20220914.0958.txt)lsコマンドはファイル名に両方の日付を印刷するため、このスクリプトは機能しません。

名前は同じですが、名前に日付/時刻が異なる複数のファイルがある場合(上記のように)、どのように印刷しますか?最新のもの(現在の日付に最も近いもの)のみ?

ベストアンサー1

ループの用途は次のとおりです。

#!/bin/bash

for FILE in /some/directory/File156tr.*.*.txt
do 
  FROM_FILE=$(echo $FILE | grep -Eo '[[:digit:]]{8}')
  NOW=$(date +"%Y%m%d")
  DIFFERENCE=$(($NOW - $FROM_FILE))

  if [ $DIFFERENCE -ge 1 ]; then
      echo "There are files that are older than today's date"
  fi
done

おすすめ記事