[Shell Script] 두파일을 비교, 오래된 파일 삭제하기

 두파일을 비교, 오래된 파일 삭제하기 



타임 스탬프를 비교해서 어느쪽이 오래되었는지 판단하고 싶을 때 사용합니다 . 






스크립트
#!/bin/sh

#비교대상 파일
log1="log1.log"
log2="log2.log"

#인수 파일이 존재하는지 확인 후 존재 하지 않으면 종료

filecheck()
{

    if [ ! -e "$1" ]; then
        echo "ERROR : File $1 does not exist." >&2
        exit 1;
    fi

}

filecheck "$log1"
filecheck "$log2"

#두 파일을 비교, 오래된쪽 삭제

if [ "log1" -nt "$log2" ]; then
    echo "[$log1]->newer, [$log2]->older"
    rm $log2
else
    echo  "[$log2]->newer,[$log1]->older"
    rm $log1
fi

이 스크립트는 셸 변수 log1과 log2로 지정한 두파일의 타임스탬프를 비교하여 오래된 파일을 rm 명령어로 삭제합니다 . 

filecheck으로  셸 변수를 준비합니다 . 
 여기서 if 문과 테스트 명령어의 -e로 파일의 존재를 확인합니다 . 

파일 존재를 확인 할때 !라는 부정 연산자를 사용하여 전체의 참 거짓을 반대로 만듭니다 
-e로 '파일이 존재한다면 참'이므로 이것을 부정하면 파일이 존재 하지 않을 때를 처리 할 수 있습니다 . 

또한 $1은 위치 파라미터라고 부릅니다 . 이때 셸 함수 내부에서는 함수 인수를 나타냅니다 . 

파일 스탬프를 비교

마지막 if 문에서 타임스탬프를 비교합니다 . nt는 newer the이라는 약어로 다음과같이 사용합니다 . 

if [ <리스트> 파일1 -nt <파일2>]; then 

즉, if 문이 참이면 파일 2가 오래 되었고 반대로 거짓이면 파일1이 오래되었다는 뜻입니다 .
 
결과로 rm 명령어를 사용하여 오래된 파일을 삭제합니다.