새로운 테스트의 정확성

새로운 테스트의 정확성

-newer테스트가 원하는 만큼 정확하지 않은 것 같습니다 . 다음을 사용하여 ls -lt올바른 정렬 순서를 얻습니다 .

-rw-r--r--@ 1 p  staff      48 Jan 26 14:42 foo.gdb
-rw-r--r--@ 1 p  staff  328971 Jan 26 14:42 foo.pdf
-rw-r--r--@ 1 p  staff    3133 Dec 14 05:52 foo.tex

그러나 -newer테스트 결과를 사용하면 다음과 같습니다.

../isNewer.sh foo.gdb foo.pdf
File 1 is older than file 2

../isNewer.sh foo.pdf foo.gdb
File 1 is older than file 2

../isNewer.sh어디

#!/bin/bash

if [ $1 -nt $2 ]; then
  echo "File 1 is newer than file 2"
else
  echo "File 1 is older than file 2"
fi

출력 stat:

stat foo.pdf foo.gdb주석에서 요청한 대로 출력(가독성을 위해 수동으로 공백을 추가함)은 다음과 같습니다.

16777217 255313605 -rw-r--r-- 1 p staff 0 328971 "Jan 26 21:28:06 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 648 0 foo.pdf
16777217 255313604 -rw-r--r-- 1 p staff 0 48     "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 8   0 foo.gdb

질문:

  • 테스트는 얼마나 정확합니까 -newer>?
  • 한 파일이 다른 파일보다 최신인지 여부를 보다 세부적으로 테스트할 수 있는 다른 방법이 있습니까(아마도 분이 아닌 초 단위로 비교)?

플랫폼:

  • Bash 3.2.53(1) 릴리스가 포함된 MacOS

답변1

운영자는 -nt두 파일의 기간을 비교할 때 마지막으로 수정된 시간을 사용합니다.

출력 에 따르면 stat이 예의 두 파일에는정확히 같은 수정 시간(두 번째까지 정확함), Jan 26 14:42:16 2017(출력의 두 번째 타임스탬프 stat)

따라서 한 파일은 다른 파일보다 "최신" 파일이 아니며 테스트 실행 순서에 관계없이 테스트는 false를 반환합니다.

관련 정보