쉘 스크립트에서 수정된 날짜와 현재 날짜의 차이를 얻는 방법은 무엇입니까? [폐쇄]

쉘 스크립트에서 수정된 날짜와 현재 날짜의 차이를 얻는 방법은 무엇입니까? [폐쇄]
#!/bin/bash
echo "hi"
path="/home/alert/VideoApplicationAPI.v1/logs"
dayDiff=365

DATE=`date +%Y-%m-%d`
for filename in $path/*.*; do
    modDate=$(stat -c %y  "$filename") 
    #modDate=$(date -r   "$filename"+%s) 
    modDate=${modDate%%  *}
    echo $filename:$modDate

    #lastUpdate=$(stat -c %y "$filename")
    now="$(date +%s)"
    diff="${now}-${lastUpdate}"
done

echo $DATE 

답변1

전달에 가깝습니다이 문제. 해당 스크립트를 형식에 맞게 조정하면 다음 명령 세트가 제공됩니다.

echo "$(( $(date -d "$d2" +%s) - $(date -d "$d1" +%s) )) / 86400" | bc -l

여기서 $d1은 더 작은(이전) 날짜이고 $d2는 더 큰(이후) 날짜입니다.

따라서 내가 아는 한 다음과 같은 방법이 필요합니다.

echo "$(( $(date -d "$modDate" +%s) - $(date -d "$now" +%s) )) / 86400" | bc -l

밝히다,

bc -l

매뉴얼 페이지에 따르면,

...임의 정밀도 숫자를 지원하고 대화식으로 명령문을 실행하는 언어입니다. 구문은 C 프로그래밍 언어와 일부 유사합니다.

대부분의 쉘은 정수 나누기만 지원하므로 답에서 십진수를 얻을 수 있습니다.

답변2

여기서 무엇을 수정하고 싶은지 잘 모르겠습니다. 제가 아는 한 이것은 stat -cGNU stat에서만 작동하고 stat -c %y출력을 형식으로 제공합니다 2019-03-14 14:21:32.704211521 +0200. 두 공백 뒤에 있는 항목을 제거하려고 하지만 작동하지 않습니다.


어쨌든 타임스탬프에 대한 산술 연산을 수행하려면 에포크 이후의 초로 생각하는 것이 좋습니다. 즉 -c %Y, -c %y. 그런 다음 초 단위의 차이를 얻으려면 $(( .. ))셸에서 산술 확장을 사용할 수 있습니다.

$ diff=$(( "$(date +%s)" - "$(stat -c %Y "$file")" ))
$ echo $diff
86527

시간, 분, 초를 얻으려면 적절한 나눗셈을 수행하고 나머지를 취하십시오.

$ s=$(( diff % 60 )); m=$(( diff / 60 % 60 )); h=$(( diff / 3600 ))
$ printf "%d:%02d:%02d\n" "$h" "$m" "$s"
24:02:07

또는 예를 들어 bc십진수 일수로 시간을 얻으려면 다음과 같이 사용하십시오.@Pheri의 답변보여주다.

관련 정보