그러한 파일이나 디렉토리는 사용되지 않습니다. find -exec rm -f {} \;

그러한 파일이나 디렉토리는 사용되지 않습니다. find -exec rm -f {} \;

30일이 지난 로그를 정리하기 위해 매일 실행되는 제거 작업이 있습니다.

find /dir/app/logs -mtime +30 -exec rm -f {} \;

저는 cron에서 제3자 일정 관리 제품인 Automic으로 작업을 옮기는 중입니다. 이 작업을 이동한 이후로 "해당 파일이나 디렉터리가 없습니다"라는 오류가 계속 발생합니다. 오류를 수신한 후 프롬프트에서 find 명령을 실행하십시오. -exec rm -f {} \;를 추가하지 않으면 결과가 반환되지 않으며 작업이 성공합니다. 간단히 말해서 오류를 재현할 수 없습니다.

작업은 다음 명령을 실행하여 실행됩니다.

ssh user@server "find /dir/app/logs -mtime +30 -exec rm -f {} \;"

원격 서버를 대상으로 합니다.

다양한 솔루션을 테스트했지만 운이 없었습니다. 처음에는 명령이 -f 없이 실행됩니다. 내가 아는 한 -f를 추가하면 오류가 억제되지만 그런 일은 발생하지 않습니다. -exec rm {} \;를 -delete로 바꾸려고 했지만 그것도 도움이 되지 않았습니다.

현재 여기에 제안된 대로 \;를 +로 변경하는 것을 테스트 중입니다.

찾기 - -delete를 사용하여 rm 실행

무슨 일이 일어나고 있는지에 대한 통찰력을 제공해 주셔서 미리 감사드립니다.

답변1

잠시 휴식을 취하고 더 많은 인터넷 검색을 한 후에 이 솔루션으로 문제를 해결할 수 있습니다.

find /usr/dir/logs/ -mindepth 1 -mtime +45 -delete

find상위 디렉터리를 포함 rm하고 먼저 삭제하려고 시도하는 것 같습니다 . 이는 때때로 작동하고 파일/디렉터리 누락 오류가 발생하는 이유를 설명합니다. -delete훌륭하게 작동합니다. 추가하면 상위 -mindepth 1항목을 건너뛰게 됩니다.

삭제하면 안 되는 하위 디렉터리를 유지하려면 " -type f보기 전용 파일 유지" 파일을 추가하세요. 또한 특정 파일을 무시해야 하는 상황도 있습니다. 이 경우에는 작동하는 것 같습니다.

find /usr/dir/logs/ -mindepth 1 -type f \( ! -name "ignoreme*" \) -mtime +30 -delete

관련 정보