"인수 목록이 너무 길다"는 경우 3 일이 지난 모든 파일을 삭제하는 방법은 무엇입니까?


89

82000 개의 파일과 디렉토리가있는 로그 파일 디렉토리가 있습니다 (약 절반과 절반).

3 일이 지난 파일과 디렉토리를 모두 삭제해야합니다.

37000 개의 파일이있는 디렉토리에서 다음을 사용하여이 작업을 수행 할 수 있습니다.

find * -mtime +3 -exec rm {} \;

그러나 82000 개의 파일 / 디렉토리를 사용하면 오류가 발생합니다.

/ usr / bin / find : 인수 목록이 너무 깁니다.

3 일이 지난 모든 파일 / 디렉터리를 삭제할 수 있도록이 오류를 어떻게 해결할 수 있습니까?


1
시도해 보셨습니까 find -mtime +3 -exec rm {} +?
Gilles Quenot 2013

1
나는 달리기 find * -mtime +3 |xargs rm가 그 문제를 해결할 것이라고 믿는다 .
Mats Petersson 2013

9
유일한 문제는 find *. find .더 나은. 쉘 globing *은 파일과 디렉토리의 거대한 목록 으로 확장합니다 .
artless noise

@artlessnoise가 자리 잡고 있습니다.
sjas

답변:


120

현재 디렉토리 내의 모든 파일 디렉토리 를 삭제하려면 :

find . -mtime +3 | xargs rm -Rf

또는 OP의 원래 명령과 더 일치합니다.

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1 문제는 "find *"의 별입니다. "find"를 사용하여 해결했습니다. 대신. Xargs는 여기에서 오해의 소지가 있습니다.
Aleksandr Levchuk 2013 년

7
@AleksandrLevchuk 그것은 OP 문제를 해결하기 때문에 반대 투표를받을 자격이 없습니다
hd1

11
질문 : "find * -mtime +3 -exec rm {} \;" 인수 목록이 너무 깁니다. 답 : "find. -mtime +3 -exec rm {} \;"을 사용하십시오.
Aleksandr Levchuk 2013

2
당신은 추가 할 수 있습니다 --같은, RM 후find . -mtime +3 -exec rm -- {} \;
일러스트 Domen

8
아무도 그것이 무엇인지 말하지 않았습니다 --.
아큐 메 너스

59

다음을 사용할 수도 있습니다.

find . -mindepth 1 -mtime +3 -delete

대상 디렉터리를 삭제하지 않으려면


4
rm을 호출하는 것보다 훨씬 더 깔끔한 (그리고 아마도 더 안전 할 것입니다) 최고의 대답입니다. 하위 디렉터리에서도 작동합니다.
basic6

16

원래 질문에 대한 또 다른 해결책, esp. 폴더에서 이전 파일 중 일부만 제거하려는 경우 유용합니다.

find . -name "*.sess" -mtime +100 

등 .. 따옴표는 쉘 와일드 카드를 차단하므로 수백만 개의 파일을 "찾을"수 있습니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.