it-swarm-ko.tech

X 일보다 오래된 파일 삭제 +

폴더에서 5 일이 지난 파일을 삭제하는 명령을 찾았습니다.

find /path/to/files* -mtime +5 -exec rm {} \;

그러나 해당 폴더의 하위 디렉토리에 대해서도 어떻게합니까?

158
Teddy291

Rm으로 파이핑 할 때 특수 파일 이름 (공백, 따옴표)에주의하십시오.

안전한 대안이 있습니다 --delete 옵션 :

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

즉, 별도의 rm 호출이 없으므로 파일 이름에 대해 걱정할 필요가 없습니다.

이 명령을 실행하기 전에 -delete-depth -print로 바꾸십시오 (-delete-depth를 나타냄).

266
basic6

파일이 너무 많으면이 명령이 작동하지 않습니다. 다음과 같은 오류가 발생합니다.

bash: /usr/bin/find: Argument list too long

명령 행 길이에 대한 실행 시스템 호출 한계를 초과했음을 의미합니다. rm을 그런 식으로 실행하는 대신 xargs 를 사용하는 것이 훨씬 효율적입니다. 다음은 작동하는 예입니다.

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

이렇게하면/root/Maildir/아래에서 14 일 전에 수정 된 모든 파일 (유형 f)이 재귀 적으로 더 깊이 제거됩니다 (마음 1). 더 많은 옵션은 찾기 설명서를 참조하십시오 .

18
Julius

그것은 동일합니다. 파일의 접두사가 아닌 상위 디렉토리 만 제공하면됩니다. 귀하의 예에서 다음과 같습니다.

find /path/to -type f -mtime +5 -exec rm {} \;

5 일보다 오래된 파일은 /path/to 및 해당 서브 디렉토리.

빈 하위 디렉토리를 삭제하려면 위의 @Costas 주석을 참조하십시오.

9
apaul

의견이 충분하지 않아 답변으로 게시 중 ...

find가 실제로 인수를 -mtime로 해석하는 방법에는 미묘한 부분이 있습니다.

find /path/to/files* -mtime +5 -delete

6 일 이상 6 일이 지난 파일을 5 일 이상 삭제합니다. 실제로 "5 일보다 오래된"파일을 삭제하려면

find /path/to/files* -mtime 5 -delete

-mtime는 주어진 숫자에 24를 곱하여 시간과 함께 작동하며 분수도 사용할 수 있으므로 -mtime 0.5는 12 시간보다 오래된 파일을 삭제합니다.

find 및 타임 스탬프 작동 방식에 대한 관련 질문에 대해서는 this answer 을 참조하십시오.

0
this