find 및 rm 명령은 디렉토리 내의 파일과 디렉토리 자체를 삭제합니다.

find 및 rm 명령은 디렉토리 내의 파일과 디렉토리 자체를 삭제합니다.

이 명령을 확인해 주시겠어요? 파일과 현재 디렉토리 자체를 삭제하고 있습니다. 스크립트는 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 {} \;

관련 정보