폴더에 약 10,000 개의 파일이 있다고 가정합니다. 매시간 crontab을 사용하여 지난 60 분 동안 수정 된 파일을 찾은 다음 처리합니다.

01:00:00에 find -mmin -60 호출

첫 번째 파일이 00:00:00에 수정되었고 01:00:00에 “찾기”로 쉽게 찾을 수 있다고 가정합니다.

그런 다음 10,000 번째 파일도 00:00:00에 수정되었다고 가정합니다.

그러나 현재는 01:10에 있습니다. : 00 및 “find”는 여전히 10,000 번째 파일에 도달하기 위해 열심히 노력하고 있습니다.

그러므로 이제 70 분 후 “find”는 10,000 번째 파일을 반환합니다. 00:00:00에 수정 된 파일?

Answer

GNU find에서 평가에 사용되는 참조 시간 -mmin 등이 포함 된 파일은 표현식을 구문 분석 할 때 계산 및 저장 되므로 find가 시작됩니다.

즉, 이러한 모든 시간 비교는 find에 평가 된 모든 파일에 대해 동일한 시간 참조를 사용합니다. 명령 줄을 구문 분석했습니다.

답변

GNU 찾기를 가정하면 쉽게 테스트 할 수 있습니다.

% mkdir foo; cd foo; touch a b % find -mmin 1 . ./a ./b % find -mmin 1 -exec sleep 120 \; -print . # 2 minutes wait before this showed up ./a # another 2 minutes before this showed up ./b # and another 2 minutes for this one % find -mmin 1 % 

bfind가 iv id =를 실행 한 후 최소 4 분 후에 마지막으로 수정되었지만 a의 “01d8eb925d”>

는 여전히 일치합니다.


-mmin 이후 “t POSIX, 이것은 구현에 달려 있지만 위에서 본 동작을 예상합니다.

코멘트

  • FW IW, 내 Mac의 (FreeBSD 기반?) findfind . -mmin 1 -exec sleep 120 \; -print

답변

두 터미널에서 다음 명령을 차례로 시도합니다.

터미널 1 :

find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file" 

터미널 2 :

touch -d " 0 seconds ago" /path/to/some/file 

결과를 다음과 같이 얻을 수 있습니다.

Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file 

나는 명령의 시작 시간 앞에 찾기 결과를 붙입니다. find는 명령 시작 시간 이후에 수정 된 파일을 검색 할 수 있다는 것을 보여줍니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다