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 1
options: 아래 서브디렉토리에만 액세스합니다./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/base
10일 이상 경과한 것
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
dir가 비어있지 않다고 불평할 것입니다.그 대신에, 그것은 암시한다.-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
'code' 카테고리의 다른 글
Git에서 파일 이동/이름 변경 및 이력 유지가 가능합니까? (0) | 2023.04.18 |
---|---|
Excel 파일(.xlsx)을 작성 및 쓰는 방법 (0) | 2023.04.18 |
매개 변수가 없는 SQL 주입 방지 (0) | 2023.04.18 |
SQL 쿼리를 사용하여 테이블 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.18 |
Objective-C와 Cocoa를 작성할 때 사용하는 베스트 프랙티스는 무엇입니까? (0) | 2023.04.18 |