Stat를 사용하지 않고 두 날짜를 비교하는 방법은 무엇입니까?

Stat를 사용하지 않고 두 날짜를 비교하는 방법은 무엇입니까?

파일의 마지막 수정 날짜를 오늘 날짜와 비교하려고 합니다. 내 스크립트는 수정된 날짜가 오늘 날짜 이전이면 한 가지 작업을 수행하고, 날짜가 오늘 날짜와 일치하면 다른 작업을 수행해야 합니다. 이제 내 코드는 다음과 같습니다.

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 에포크 이후 수정 날짜와 비교합니다.

관련 정보