名前に日付を含むファイルをシステムの現在の日付と時刻と比較しようとしています。
ファイル名は次の形式に従います。
ファイル名.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