IT박스

n 일보다 오래된 디렉토리를 삭제하는 쉘 스크립트

itboxs 2020. 6. 10. 22:52
반응형

n 일보다 오래된 디렉토리를 삭제하는 쉘 스크립트


다음과 같은 이름의 디렉토리가 있습니다.

2012-12-12
2012-10-12
2012-08-08

bash 쉘 스크립트를 사용하여 10 일보다 오래된 디렉토리를 어떻게 삭제합니까?


이것은 당신을 위해 재귀 적으로 할 것입니다 :

find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf {} \;

설명:

  • find: 파일 / 디렉토리 / 링크 등을 찾기위한 unix 명령
  • /path/to/base/dir: 검색을 시작할 디렉토리입니다.
  • -type d: 디렉토리 만 찾습니다
  • -ctime +10: 수정 시간이 10 일보다 오래된 것만 고려하십시오.
  • -exec ... \;: 발견 된 각 결과에 대해 다음 명령을 수행하십시오. ...
  • rm -rf {}: 디렉토리를 재귀 적으로 강제 제거합니다. {}찾기 결과가 이전 부분에서로 대체됩니다 어디 부분이다.

또는 다음을 사용하십시오.

find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf

다음과 같은 이유로 조금 더 효율적입니다.

rm -rf dir1 dir2 dir3 ...

반대로 :

rm -rf dir1; rm -rf dir2; rm -rf dir3; ...

-exec방법 에서와 같이 .


현대 버전으로 find, 당신은을 대체 할 수 ;+그리고 그것은에 해당 할 것입니다 xargs각 간부 시스템 호출에 맞는 많은 파일로 통과, 당신을 위해 전화 :

find . -type d -ctime +10 -exec rm -rf {} +

/path/to/base예를 들어 아래의 모든 하위 디렉토리를 삭제하려면

/path/to/base/dir1
/path/to/base/dir2
/path/to/base/dir3

하지만 루트를 삭제하지 않으려면 /path/to/base추가 -mindepth 1-maxdepth 1옵션 을 추가해야합니다.이 옵션은 아래의 하위 디렉토리에만 액세스합니다./path/to/base

-mindepth 1/path/to/base일치 하는 루트 제외합니다 .

-maxdepth 1됩니다 바로 아래 서브 디렉토리와 일치 /path/to/base등을 /path/to/base/dir1, /path/to/base/dir2그리고 /path/to/base/dir3하지만하지 않습니다 재귀 방식으로이 목록의 하위 디렉토리. 따라서 다음 예제 서브 디렉토리는 나열되지 않습니다.

/path/to/base/dir1/dir1
/path/to/base/dir2/dir1
/path/to/base/dir3/dir1

기타 등등.

따라서 /path/to/base10 일보다 오래된 모든 하위 디렉토리를 삭제합니다 .

find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf

find-delete작동을 지원 하므로

find /base/dir/* -ctime +10 -delete;

파일이 10 일 이상 더 오래 걸렸다는 생각이 들었습니다. 시도하지 않은 사람은 의견을 확인할 수 있습니다.

여기에서 가장 많이 투표 된 솔루션이 누락 -maxdepth 0되어 rm -rf삭제 후 모든 하위 디렉토리를 호출 합니다. 그것은 말이되지 않으므로 제안합니다.

find /base/dir/* -maxdepth 0  -type d -ctime +10 -exec rm -rf {} \;

디렉토리가 비어 있지 않다고 불평 -delete하기 -maxdepth 0때문에 솔루션은 사용하지 않습니다 find. 대신 -depth아래에서 위로 암시 하고 삭제합니다.


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

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

tmpreaper -t 5d ~/Downloads


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

원본 소스 링크

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


또는

rm -rf `find /path/to/base/dir/* -type d -mtime +10`

업데이트되고 더 빠른 버전 :

find /path/to/base/dir/* -mtime +10 -print0 | xargs -0 rm -f

참고 URL : https://stackoverflow.com/questions/13868821/shell-script-to-delete-directories-older-than-n-days

반응형