특정 파일보다 몇 시간 오래된 파일 찾기

특정 파일보다 몇 시간 오래된 파일 찾기

참조 파일보다 오래된 모든 파일을 찾으려면 다음 명령을 사용하고 있습니다.

find /home/testuser -name "dummyfiles*" ! -newer referencefile.txt

...예상대로 작동합니다.

그러나 참조 파일보다 몇 시간 오래된 파일만 검색하도록 시간에 대해 좀 더 여유를 갖고 싶습니다.

예를 들어 수정 날짜가 인 참조 파일이 있는 경우 May 26 11:26다음보다 오래된 파일을 찾고 싶습니다 May 26 9:26(즉, 참조 파일에 대해 2시간의 유예 기간이 있음).

이 예에서 다음은 올바른 일치입니다.

May 26 7:00
Apr 15 14:00

...다음은아니요성냥...

Jun 13 9:00
May 26 10:00

궁극적으로 찾은 모든 파일을 삭제하고 싶은데 find해당 요구 사항을 충족한다면 마음에 들까요? 그렇지 않으면 너무 복잡하지 않고 이러한 파일을 삭제할 수 있는 다른 대안이 있습니까?

답변1

GNU 시스템에서는 다음을 수행할 수 있습니다.

TZ=UTC0 find /home/testuser -name "dummyfiles*" ! -newermt "$(
  TZ=XXX2:00:00 date -r referencefile.txt +%FT%T.%N)"

즉, dateUTC보다 2시간 뒤인 시간대에서 파일 수정 사항을 인쇄하고(따라서 파일이 UTC 15:00에 마지막으로 수정된 경우 date인쇄됩니다 13:00) find해당 타임스탬프를 UTC 시간으로 해석합니다(따라서 이 예에서는 다음을 찾으려고 합니다). UTC 13:00 이전에 마지막으로 수정된 파일).

오프셋은 최대 24시간( TZ=XXX-24또는 에 사용하는 경우 48시간 find)으로 제한됩니다. 임의 오프셋의 경우 다음을 수행할 수 있습니다.

(
export TZ=UTC0
find /home/testuser -name "dummyfiles*" ! -newermt "$(
  date -d "$(date -r referencefile.txt +%FT%T.%N) - 2 hours" +%FT%T.%N)"
)

또는 다음을 사용할 수 있습니다 perl.

perl -MFile::Find -le '
  $min_age = (-M "referencefile.txt") + 2/24;
  find (sub {
    print $File::Find::name if $_ =~ /^dummyfiles/ && (-M$_) > $min_age
    }, @ARGV)
  ' -- /home/testuser

findGNU (그러나 GNU 와 유사 date -r) 와는 달리 심볼릭 링크의 경우 심볼릭 링크 자체의 수명이 아니라 링크된 파일의 수명을 perl고려합니다 . -M타임스탬프의 1초 미만 부분도 고려되지 않습니다.

답변2

이 시도:

find /home/testuser -name "dummyfiles*" ! -newer referencefile.txt -mmin +120 -print

매개변수 -mmin +120find 명령을 추가하면 referencefile.txt의 수정 날짜와 비교하여 2시간보다 오래된 파일만 반환됩니다.

시험:

mkdir find
touch find/dummyfiles1 find/dummyfiles2 find/dummyfiles3 find/dummyfiles4 find/referencefile.txt
touch -t 8001031305 dummyfiles1 dummyfiles2
find find/ -name "dummyfiles*" ! -newer find/referencefile.txt -mmin +120

산출:

찾기/더미파일1

찾기/더미파일2

관련 정보