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


143

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

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

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


하위 디렉토리 내의 파일을 의미합니까? 또는 하위 디렉토리 자체?
rahul

3
find /path/to -type d -empty -delete
Costas

2
5 일 이상 된 하위 디렉토리의 파일 삭제
Teddy291

3
공백이있는 파일이있을 때 아마도 재미있을 것입니다. 예를 들어 "test one"이라는 파일이 있으면 rm이 제공 rm test one됩니다. "test"라는 파일과 "one"이라는 파일은 삭제하지만 "test one"이라는 파일은 삭제하지 않습니다. 힌트 : -delete 또는 -print0
Hennes

6
참고로, 답변의 첫 번째 줄에서 언급 한 것처럼 특수 문자와 관련된 문제를 피하기 위해 항상 제공되는 주장을 인용하십시오find . 예 :find /path/to/files/ -exec somecommand '{}' \;
Walf

답변:


240

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

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

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

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

교체 -delete-depth -print당신이 (실행하기 전에이 명령을 테스트하는 -delete의미 -depth).


23
또한 -type f파일 만 삭제하고 하위 디렉토리를 유지 하는 데 사용
Oleg

3
또는 모든 파일에 대해 5 일 이상 동일한 작업을 수행하려는 경우 : / path / to / directory /
-mindepth

내 경로에 공백이 있으면 어떻게해야합니까? find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete?
Patrick Gregorio

3
@ uom-pgregorio 경로를 따옴표로 묶는 것이 좋습니다.
atripes

4
모든 find인수는 이전 필터의 결과를 입력으로 사용하는 필터입니다. 따라서 -delete를 마지막 인수로 추가하십시오. IE : find . -delete -mtime +5현재 경로에서 모든 것을 삭제합니다.
요한

15

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

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). 추가 옵션에 대해서는 찾기 매뉴얼을 참조하십시오 .


7
AskUbuntu에 대한 @AfshinHamedi의 답변 ( askubuntu.com/questions/589210/removing-files-older-day-7-day-7-day )에 개행 문자와 특수 문자가 포함 된 파일에주의하십시오. 대신 사용find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
Cbhihe

2
또는 찾기 결과에 '+'를 추가하십시오
Dani_l

8

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

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

5 일이 지난 파일 /path/to과 그 하위 디렉토리 가 모두 삭제됩니다 .

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


4
각각의 모든 파일에 대해 rm 명령을 실행합니다. 5 일이 지난 1000 개의 파일이 있으면 rm은 1000 번 시작됩니다. 이러한 이유로 Costa의 설명 또는 -exec rm {} \ +
Hennes

@Hennes :-1) +그런 경우 에 벗어날 필요가 없습니다 . -2) -exec rm '{}' +이름에 특수 문자 (공백, 줄 바꿈 등)가있는 파일의 악을 막기 위해 작성 하는 것이 좋습니다 .
Cbhihe

-1
find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.