x 일보다 오래된 파일을 삭제하려고합니다.
이제 스크립트를 작성했습니다
find /path/to/files* -mtime +10 -exec rm {} \;
그러나 하위 디렉토리도 삭제됩니다. 많은 폴더가 있지만 폴더를 유지하고 해당 폴더 내에서 10 일이 지난 파일을 삭제하고 싶습니다.
이 방법이 있습니까?
x 일보다 오래된 파일을 삭제하려고합니다.
이제 스크립트를 작성했습니다
find /path/to/files* -mtime +10 -exec rm {} \;
그러나 하위 디렉토리도 삭제됩니다. 많은 폴더가 있지만 폴더를 유지하고 해당 폴더 내에서 10 일이 지난 파일을 삭제하고 싶습니다.
이 방법이 있습니까?
답변:
type
결과 필터링 옵션find
type
예를 들어 파일 만 선택 하는 옵션을 허용 합니다.
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/
하거나 여러 파일 및 폴더 이름을 확장 할 수있는 와일드 카드를 기대하고있다?
세미콜론을 백 슬래시로 보호하는 것처럼 셸에서 대체 된 파일 / 디렉토리 이름을 해석하지 않도록 {}
작은 따옴표를 넣으십시오 '{}'
.
find /path/to/files* -type f -mtime +10
하고 그것이 무엇을 출력하는지보십시오.
-exec
먼저 찾은 내용을 확인하십시오.
-delete
인수를 사용하여 find
모든 파일과 폴더를 삭제하며 후자는 비어있는 경우에만 삭제합니다. -depth
즉, 깊이 우선 검색을 의미합니다 .
-mindepth 1
부모 디렉토리를 제외 시키 려면 추가해야합니다 .
이전 답변에서와 같이 (둘 다 +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 ... rm
UNIX 관용구를 확인하십시오 .
위에 제공된 스크립트와 특히 파일 및 폴더 이름에 줄 바꿈이나 공백이있는 경우 다른 스크립트를 사용 하여이 권리를 얻는 데 어려움을 겪고있었습니다.
마침내 tmpreaper가 우연히 발견되었으며 지금까지 우리에게 잘 작동했습니다.
tmpreaper -t 5d ~/Downloads
tmpreaper --protect '*.c' -t 5h ~/my_prg
원본 소스 링크
디렉토리를 재귀 적으로 확인하고 나열하는 test와 같은 기능이 있습니다. 삭제하는 동안 심볼릭 링크, 파일 또는 디렉토리를 삭제하는 기능 및 특정 패턴에 대한 보호 모드