今日の日付をファイルの最終更新日と比較しようとしています。
DATE=$(date +"%F")
LASTMOD=$(stat $i -c %y);
LASTMOD_DATE=$(cut -d' ' -f1 <<<"$LASTMOD")
if [ "$LASTMOD_DATE" -ge "$DATE" ]; then
printf "%-19s | " "$DATE"
else
printf "%-19s | " "NO RECENT MOD"
fi
現在、これはそれらを適切に比較していません。LASTMOD_DATEは実際には日時ではないため、「整数式が必要です」というエラーが発生するためと考えられます。
タイムスタンプ形式date +%s
および-r
オプションを使用できます。
-r, --reference=FILE
display the last modification time of FILE
お気に入り
if [ $(date +%s -r file) -ge $(date +%s) ]; then
# do something
fi
時点(日付)を比較する最良の方法は、秒単位です(エポック以降)。
Statの%y
を%Y
に変更すると、ファイルの変更日が秒単位で表示されます。
fileModifiedOn=$(stat $i -c %Y)
今日の日付は、%s形式の(GNU)日付で読み取ることができます。
todayDate=$(date +'%s')
または、Bash 5.0では、変数EPOCHSECONDS
を使用します。
todayDate=$EPOCHSECONDS
または、古いbashでは、(組み込みの)printf形式を使用します。
todayDate=$(printf '%(%s)T')
次に、それは単純な整数比較の問題です:
if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
result=$todayDate
else
result="NO RECENT MOD"
fi
printf "%-19s | " "$result"