폴더에서 5 일이 지난 파일을 삭제하는 명령을 찾았습니다.
find /path/to/files* -mtime +5 -exec rm {} \;
그러나 해당 폴더의 하위 디렉토리에 대해서도 어떻게합니까?
답변
rm으로 파이핑 할 때 특수 파일 이름 (공백, 따옴표)에주의하십시오.
안전한 대안 인 -delete 옵션이 있습니다.
find /path/to/directory/ -mindepth 1 -mtime +5 -delete
즉, 별도의 rm 호출이 없으므로 파일 이름에 대해 걱정할 필요가 없습니다.
교체 -delete
로 -depth -print
당신이 (실행하기 전에이 명령을 테스트하는 -delete
의미 -depth
).
답변
파일이 너무 많으면이 명령이 작동하지 않습니다. 다음과 같은 오류가 발생합니다.
bash: /usr/bin/find: Argument list too long
명령 행 길이에 대한 exec 시스템 호출 한계를 초과했음을 의미합니다. rm을 그런 식으로 실행하는 대신 xargs 를 사용하는 것이 훨씬 효율적 입니다. 작동하는 예는 다음과 같습니다.
find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm
이렇게하면 / root / Maildir / 아래에서 14 일 전에 수정 된 모든 파일 (유형 f)이 재귀 적으로 더 깊이 제거됩니다 (마음 1). 추가 옵션에 대해서는 찾기 매뉴얼을 참조하십시오 .
답변
그것은 동일합니다. 파일의 접두사가 아닌 부모 디렉토리 만 제공하면됩니다. 귀하의 예에서는 다음과 같습니다.
find /path/to -type f -mtime +5 -exec rm {} \;
5 일이 지난 파일 /path/to
과 그 하위 디렉토리 가 모두 삭제됩니다 .
빈 하위 디렉토리를 삭제하려면 위의 @Costas 주석을 참조하십시오.
답변
find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf