하위 디렉토리가있는 x 일보다 오래된 파일을 삭제하는 Bash 스크립트


37

x 일보다 오래된 파일을 삭제하려고합니다.

이제 스크립트를 작성했습니다

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

그러나 하위 디렉토리도 삭제됩니다. 많은 폴더가 있지만 폴더를 유지하고 해당 폴더 내에서 10 일이 지난 파일을 삭제하고 싶습니다.

이 방법이 있습니까?

답변:


50

type 결과 필터링 옵션

findtype예를 들어 파일 만 선택 하는 옵션을 허용 합니다.

find /path/to/files -type f -mtime +10 -delete

생략 -delete은 삭제할 것 무엇을 보여주기 위해, 그리고 당신이 확인되면 계속 진행하여 전체 명령을 실행합니다.

디렉토리가 아닌 파일에서만 실행됩니다. -type d반대의 경우에만 사용 하고 인수와 일치하는 디렉토리 만 나열하십시오.


추가 옵션

man find나중에 필요할 수있는 옵션이 더 있으므로를 읽고 싶을 수 있습니다 . 예를 들어, -maxdepth찾은 항목을 특정 깊이로만 제한 할 수 있습니다 (예 : -maxdepth 0하위 디렉토리로 재귀하지 않음).

비고

  • 폴더 rm만 제거 할 수 없기 때문에 명령이 폴더를 어떻게 제거했는지 궁금합니다 . 당신은 그것을 필요 rm -r로 할 것 입니다.

  • 또한 /path/to/files*혼란 스럽습니다. 이것을 찾으 셨나요? /path/to/files/하거나 여러 파일 및 폴더 이름을 확장 할 수있는 와일드 카드를 기대하고있다?

  • 세미콜론을 백 슬래시로 보호하는 것처럼 셸에서 대체 된 파일 / 디렉토리 이름을 해석하지 않도록 {}작은 따옴표를 넣으십시오 '{}'.


글쎄 / path / to / files / 내에 많은 폴더가 있습니다. 실제로 각 폴더마다 mtime +10 -exec rm을 실행하고 싶지만 폴더 자체를 유지하고 싶습니다. 기본적으로 달성하고자하는 것은 10 일이 지난 파일은 모든 폴더를 유지하십시오. 나는 새로움을 한 미안합니다 :)
JoyIan Yee-Hernandez

글쎄, 당신은 간다 :) 그냥 a를 find /path/to/files* -type f -mtime +10하고 그것이 무엇을 출력하는지보십시오.
slhck

예, 의심 스러울 때는하지 말고 -exec먼저 찾은 내용을 확인하십시오.
Rob

2
@ JoyIanYee-Hernandez 또한 -delete인수를 사용하여 find모든 파일과 폴더를 삭제하며 후자는 비어있는 경우에만 삭제합니다. -depth즉, 깊이 우선 검색을 의미합니다 .
Daniel Beck

1
@Kreker 그런 다음 -mindepth 1부모 디렉토리를 제외 시키 려면 추가해야합니다 .
slhck

5

이전 답변에서와 같이 (둘 다 +1) 트릭은 -type f술어 를 사용하는 것 입니다.

대신에 술어 -exec rm '{}'를 사용할 수도 있습니다 -delete. 하지만 그렇게하지 마십시오. 이를 통해 -exec rm '{}'먼저 -exec echo rm '{}'이것이 실제로 원하는 것인지 확인할 수 있습니다. 그런 다음 echo. 없이 명령을 다시 실행하십시오 .

사용하는 -delete것이 더 빠르지 만 (추가 파일 fork()execve()파일마다 없음 ) -delete조건으로도 작동 하므로 위험 합니다.

# delete *.tmp files
find . -type f -name '*.tmp' -delete

그러나 인수 만 바꾸면 :

# delete ALL files
find . -type f -name '*.tmp' -delete

많은 파일을 필요로 find하고 rm더 빠르게 작업하려면 find ... | xargs ... rmUNIX 관용구를 확인하십시오 .


4
마지막 두 예제가 정확히 동일하다고 생각합니다.
slhck

1

find 명령으로 쉽게 수행 할 수 있습니다

$ find -type f

결과를 형식 파일로 제한


1

위에 제공된 스크립트와 특히 파일 및 폴더 이름에 줄 바꿈이나 공백이있는 경우 다른 스크립트를 사용 하여이 권리를 얻는 데 어려움을 겪고있었습니다.

마침내 tmpreaper가 우연히 발견되었으며 지금까지 우리에게 잘 작동했습니다.

tmpreaper -t 5d ~/Downloads


tmpreaper  --protect '*.c' -t 5h ~/my_prg

원본 소스 링크

디렉토리를 재귀 적으로 확인하고 나열하는 test와 같은 기능이 있습니다. 삭제하는 동안 심볼릭 링크, 파일 또는 디렉토리를 삭제하는 기능 및 특정 패턴에 대한 보호 모드


0

명령 속도를 높이려면 '+'대신\;

find /path/to/files* -type f -mtime +10 -exec rm '{}' '+'

rm파일을 찾을 때마다 대신 한 번만 실행 됩니다.
( rm명령 줄 길이 제한으로 인해 실제로 많은 파일이있는 경우 여러 번 실행될 수 있지만 여전히을 사용하는 것보다 빠릅니다 -delete)


0

rm -f find /path/to/files -type file -mtime -5

5 일 이내에 수정 된 파일이 삭제됩니다.

rm -f find /path/to/files -type file -mtime +5

5 일 전에 수정 된 파일이 삭제됩니다.

찾기 전과 끝에 5를 사용하여`를 사용하십시오.

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