이 명령을 확인해 주시겠어요? 파일과 현재 디렉토리 자체를 삭제하고 있습니다. 스크립트는 cron을 통해 실행됩니다.
목차:
/log/dir/
/log/dir/tmp/
스크립트의 명령:
find /log/dir/ -mtime +7 -name "*" -exec rm -rf {} \;
find /log/dir/tmp -mtime +7 -name "*" -exec rm -rf {} \;
테스트: 실행하여 find /log/dir/ -mtime +7 -name "*"
파일을 확인하고 결과를 얻었습니다. 스크립트를 실행한 후 파일이 삭제됩니다. 며칠 후 폴더도 삭제되었습니다(dir in /log/dir/
및 tmp in /log/dir/tmp
).
제공된 경로 내에서 7일보다 오래된 파일/디렉터리만 삭제해야 합니다.
리눅스Redhat6.5
답변1
디렉토리가 아닌 일반 파일만 삭제 하려면 find
반드시 를 사용해야 합니다 -type f
. 이렇게 하면 디렉토리(또는 비정규 파일)를 참조하는 경로 이름이 처리되지 않습니다. 마지막 수정 타임스탬프가 삭제 기준을 충족한 이후 디렉터리가 삭제되었습니다.
또한, 파일을 삭제하려는 경우 rm -r
에도 일반 파일을 반복할 필요가 없으므로 사용하지 마세요. 대부분의 구현에서는 대신 find
를 사용하도록 선택할 수도 있습니다 .-delete
-exec rm
이는 -name "*"
작동하지 않으며 다음과 같은 이유로 제거할 수 있습니다.모든이름이 일치합니다 *
.
find를 실행하면 후자가 전자의 일부로 처리되므로 /log/dir
실행할 필요가 없습니다 . /log/dir/tmp
하위 디렉터리가 아닌 이 두 디렉터리만 보고 싶다면 -maxdepth 1
( find
지원되는 경우)에 추가하세요.하다별도로 처리해야 합니다(그러나 find
유틸리티에는 여러 개의 최상위 디렉터리가 필요하므로 이 작업은 단일 호출로 수행할 수 있습니다).
달성하려는 목표에 따른 권장 사항:
find /log/dir /log/dir/tmp -maxdepth 1 -type f -mtime +7 -delete
mtime
디렉토리에 파일이 추가되거나 제거되면 디렉토리의 목차가 업데이트됩니다. 그래서 삭제를 시도했는지 확실하지 않습니다.목차마지막으로 수정된 타임스탬프를 기반으로 하는 것이 좋습니다.
logrotate
로그 파일을 순환하려면 cron 작업이나 유사한 유틸리티를 사용하는 것도 고려할 수 있습니다 .
답변2
"7일 이상"이 무엇을 의미하는지 정의해야 합니다. 7일 이상 전에 액세스하거나, 7일 이상 전에 변경하거나, 7일 이상 전에 생성할 수 있습니다. 모든 상황이 다릅니다. 또한 파일을 고려하시겠습니까?그리고목차?
파일과 디렉터리를 삭제하려는 경우 두 번째 명령 은 /log/dir/tmp
./log/dir
이 상황에서 rm을 사용하는 것은 -r
부주의한 행동이며 의도한 것보다 더 많은 내용이 제거될 수 있습니다. Find는 이미 모든 파일/디렉토리를 재귀적으로 나열하므로 재귀적으로 삭제하여 find의 출력보다 앞서 나갈 수 있습니다. 잠시 기다려서 rm -f
삭제할 파일 목록을 찾아보세요.
당신이 하고 싶은 일은 간단하다고 생각합니다: find /log/dir/ -type f -ctime +7 -exec rm -f {} \;