Statを使用せずに2つの日付を比較するには?

Statを使用せずに2つの日付を比較するには?

ファイルの最後の変更日を今日の日付と比較しようとしています。私のスクリプトは、変更された日付が今日の日付より前の場合は1つのタスクを実行し、日付が今日の日付と一致する場合は別のタスクを実行する必要があります。今私のコードは次のようになります。

date2= ls -l file | awk '{print $6 $7}'
date1= date +%b%d

if (( $(printf "%(%s)T" "$date1") > $(printf "%(%s)T" "$date2") ))
then
  echo "date1 is after date2"
else
  echo "date1 is not after date2"
fi

このコードは機能しません。誰でもどんな提案がありますか?

答え1

GNUがインストールされている場合find、次の行は今日前に最後に変更されたファイル名を返します。

find yourfile -prune -daystart -mtime +0 -print

答え2

bash/zsh/kshファイルタイムスタンプをテストする演算子-nt更新日)。今日の真夜中touchなど、ファイルの時間を設定することもできます。0:00一般的な話す:

touch -d '0:00' /tmp/midnight
if [ file -nt /tmp/midnight ] ...

答え3

GNUシステムを使用している場合は、次のコマンドを使用できます。

#!/bin/bash
last_mod="$(date -r "$1" '+%Y%m%d')"
current="$(date '+%Y%m%d')"

if [ "$last_mod" -eq "$current" ]; then
    ## Do something
elif [ "$last_mod" -gt "$current" ]; then
    ## Do something
else
    ## Do something
fi

ファイル名を最初のパラメータとしてスクリプトに挿入します。

  • last_modファイルの最終変更日が含まれます。

  • current今日の日付が含まれています

答え4

if [[ $(date -d$(date +%D) +%s) -gt  $(date +%s -r file.txt) ]]; then
      echo "Not Today" 
      else echo "Today"
fi

今日の00:00エポック以降の経過時間をfile.txtエポック以降の変更日と比較します。

関連情報