code

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

starcafe 2023. 4. 18. 23:09
반응형

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 {}: 디렉토리를 재귀적으로 강제 삭제합니다.{}part는 find 결과가 이전 파트에서 대체되는 부분입니다.

또는 다음을 사용합니다.

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각 exec 시스템 호출에 필요한 만큼의 파일을 전달합니다.

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 1options: 아래 서브디렉토리에만 액세스합니다./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왜냐면finddir가 비어있지 않다고 불평할 것입니다.그 대신에, 그것은 암시한다.-depth아래에서 위로 삭제합니다.

특히 파일이나 폴더 이름에 줄 바꿈이나 공백이 있는 경우 위에서 설명한 스크립트와 다른 스크립트를 사용하여 이 문제를 해결하는 데 어려움을 겪었습니다.

마침내 Tmpreaper를 발견했고 지금까지 꽤 잘 작동했습니다.

tmpreaper -t 5d ~/Downloads


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

원본 링크

디렉토리를 재귀적으로 체크해 리스트 하는 테스트등의 기능이 있습니다.심볼링크, 파일 또는 디렉터리를 삭제할 수 있으며 삭제 중에 특정 패턴에 대한 보호 모드도 삭제할 수 있습니다.

또는

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

반응형