특정 파일보다 오래된 파일 삭제


14

특정 파일보다 오래된 모든 파일을 폴더에서 삭제해야합니다.
CentOS 7에서 bash 실행

나는 이것에 대한 해결책을 가지고 있지만 더 우아한 방법이 있어야한다고 생각합니다.

reference_file=/my/reference/file

get_modify_time()
{
    stat $1 | grep -Po "Modify: \K[0-9- :]*"
}

pit=$(get_modify_time $reference_file)
for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done

답변:


28

나는 그것을 시도하지 않았지만 find전체 작업을 잘 처리 할 수 ​​있어야한다.

$ find dir/ -type f ! -newer reference -delete

... 또는 ...

$ find dir/ -type f ! -newer reference ! -name reference -delete

원래:

  • ! -newer reference보다 최근에 수정 된 파일과 일치합니다 reference.
  • -delete 그것들을 삭제합니다.
  • ! -name referencereference또한 아래에 dir/있고 유지하려는 경우 제외 합니다.

이보다 모든 파일 오래된 삭제해야 reference하고, 아래에 있습니다 dir/.


2
완벽 :). 방금 -maxdepth 1검색을 재귀하지 않도록 추가되었습니다
csny

3
! -newer"신규 아님"을 의미하므로 "늙거나 같은 나이 "; 경로에있는 경우 파일 자체가 일치 find하며 명심해야 할 것입니다.
ferada

1
@ferada 당신이 그것을 배제하지 않을 것이므로, 내 대답에도 포함됩니다 ! -name reference(세 번째 글 머리 기호 참조).
존 WH 스미스

7

test사용하여 파일 수정 시간을-nt(보다 큼) 및 -ot(보다 큼) 연산자를 .

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi

2
고마워, 그건 내 솔루션보다 낫지 만 여전히 폴더의 모든 파일을 반복하고 비교해야합니다 ... 다른 대답은 훨씬 더 우아합니다
csny csny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.