find는 inname 필터와 일치하지 않는 파일을 찾습니다.

find는 inname 필터와 일치하지 않는 파일을 찾습니다.

cron 예약 작업을 실행하기 위해 find를 사용할 때 이상한 문제가 발생했습니다. 두 가지 작업이 수행되었습니다.

  1. 첫 번째 줄은 "read_"로 시작하고 ".gz"로 끝나는 파일을 매일 밤 3일 이상 삭제해야 합니다.
  2. 두 번째 줄은 ".gz.md5"로 끝나는 1분보다 오래된 파일을 매 분마다 제거해야 합니다.
1   1 * * * find <path that defiantly does not match> -type f -iname "read_*.gz" -ctime +3 -delete
*/1 * * * * find <path that defiantly does not match> -type f -iname "*.gz.md5" -cmin +1 -delete

일반적으로 이것은 잘 작동하지만 때때로 01:01에 cron에서 다음과 같은 오류 메시지가 나타납니다.

Cron <root@hostname> find <path that defiantly does not match> -type f -iname "read_*.gz" -mtime +3 -delete
find: ‘<path that defiantly does not match>/<hostname>/captured-syslog-1617836127-1617836351.gz.md5’: No such file or directory

그러나 내 관점에서는 그것은 말이되지 않습니다.

답변1

사실: 01:01에 두 개의 작업이 동시에 실행 중이었습니다.

가정: 문제의 파일 시스템은 디렉터리 항목에 파일 형식을 저장하지 않습니다.

가능한 설명

어느 시점에서는 find조사 중인 파일의 유형을 알아야 합니다. 명시적 -type테스트가 이유가 될 수 있지만, 그것이 없더라도(어떤 경우에는 그 이전에도) find파일이 디렉터리인지 알아야 합니다. 디렉터리인 경우 find해당 디렉터리에 삭제됩니다.

귀하의 파일 시스템이 파일 유형 정보를 디렉토리 항목에 저장하지 않는 것 같습니다. 이 경우 파일 형식을 알고 싶으면 find호출이 필요합니다 lstat(항상 그런 것은 아니지만 일부 최적화를 수행할 수 있습니다. 참조).이 답변), 파일이 존재해야 합니다.

find파일이 특정 디렉토리에 있다는 것을 알게 된 후 다른 사람이 파일을 삭제한 경우 lstat, No such file or directory귀하의 경우에는 "다른 것"이 또 다른 작업입니다.

파일 시스템이 파일 유형 정보를 디렉토리 항목에 저장하는 경우 상황은 다릅니다. 이는 다른 작업 이 파일을 삭제하는 경우에만 발생할 -ctime수 있지만 이전에 테스트되었으며 가능한 모든 간섭을 필터링했기 때문에 이런 일은 발생하지 않습니다 .-cminNo such file or directory-iname

나는 실제로 이 플래그를 사용하거나 사용하지 않고 생성된 파일 시스템 find에서 GNU를 테스트했습니다 . 이 플래그가 없으면 파일 시스템은 디렉터리 항목에 파일 형식을 저장하지 않습니다. 다른 프로세스에서 파일이 생성되고 삭제되는 상황을 정리했습니다. 이 파일들은 의도적으로ext4filetype아니요일치 -iname하여 함께 사용하십시오 find.

filetype해당 플래그가 없는 파일 시스템에 대한 테스트에서 find내가 사용 중인 No such file or directory파일과 일치하지 않는 파일 에 대한 불만이 자주 발생했습니다. -iname테스트에 불만이 없었습니다 filetype find.

관련 정보