bash에서 파일 타임 스탬프를 비교하는 방법은 무엇입니까?


16

두 파일의 타임 스탬프를 어떻게 비교합니까?

나는 이것을 시도했지만 작동하지 않습니다 :

file1time=`stat -c %Y fil1.txt`
file2time=`stat -c %Y file2.txt`
if[$file1time -gt $file2time];
then
 doSomething
fi

나는 타임 스탬프를 순서대로 인쇄했고 나에게 그것을 준다.

1273143480
1254144394
./script.sh: line 13: [1273143480: command not found

그래서 기본적으로 경우 비교가 작동하지 않는 것 같아요. 또는 내가하고있는 것보다 다른 좋은 방법이 있으면 알려주십시오. 무엇을 변경해야합니까?


1
코드는 대괄호 주위에 공백이 필요합니다.
Jonathan Leffler

테스트 메커니즘은 타임 스탬프를 비교하기위한 내장 메커니즘과 비교할 때 매우 복잡합니다.
Jonathan Leffler

답변:


26

타임 스탬프를 비교하는 연산자는 다음과 같습니다.

[ $file1 -nt $file2 ]
[ $file1 -ot $file2 ]

니모닉은 쉽습니다 : '보다 큼'및 '보다 큼'.


5

이것은 공백이 없기 때문입니다. [는 명령이므로 주변에 공백이 있어야 ]하며 쉼표 줄이 끝나는 위치를 알려주는 특수 매개 변수입니다. 따라서 테스트 라인은 다음과 같아야합니다.

if [ $file1time -gt $file2time ];

3
[테스트 명령입니다. bash매뉴얼 페이지 의 "조건문"섹션을 참조하십시오. /usr/bin/test및에 독립 실행 형 실행 파일도 /usr/bin/[있지만 bash를 사용하고 전체 경로를 사용하지 않는 경우 셸 내장을 사용합니다.
Doug Harris

주제에 대한 자세한 설명은 @Doug Harris +1을 참조하십시오.
goedson

1

if마법이 아닙니다. 전달 된 명령을 실행하려고 시도하고 종료 상태가 0인지 확인합니다. 또한 존재하지 않는 인수를 잘 처리하지 않으므로 사용되는 변수를 인용해야합니다.

if [ "$file1time" -gt "$file2time" ]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.