참조 파일보다 오래된 모든 파일을 찾으려면 다음 명령을 사용하고 있습니다.
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)"
즉, date
UTC보다 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
find
GNU (그러나 GNU 와 유사 date -r
) 와는 달리 심볼릭 링크의 경우 심볼릭 링크 자체의 수명이 아니라 링크된 파일의 수명을 perl
고려합니다 . -M
타임스탬프의 1초 미만 부분도 고려되지 않습니다.
답변2
이 시도:
find /home/testuser -name "dummyfiles*" ! -newer referencefile.txt -mmin +120 -print
매개변수 -mmin +120
find 명령을 추가하면 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