3일이 넘은 비어 있지 않은 디렉터리를 찾아서 삭제하고 싶습니다.
find . <Path> -mtime +3 -exec rm -rf "{}" \;
파일이 있는 디렉터리를 삭제하고 싶습니다. 디렉터리와 파일이 모두 3일 이상 지났습니다.
/tmp
drwxr-x--- 2 root root 4096 Nov 6 05:05 20191106
drwxr-x--- 2 root root 4096 Nov 7 05:05 20191107
drwxr-x--- 2 root root 4096 Nov 8 05:05 20191108
drwxr-x--- 2 root root 4096 Nov 9 05:05 20191109
drwxr-x--- 2 root root 4096 Nov 10 05:05 20191110
drwxr-x--- 2 root root 4096 Nov 11 05:05 20191111
drwxr-x--- 2 root root 4096 Nov 12 05:05 20191112
drwxr-x--- 2 root root 4096 Nov 13 05:05 20191113
drwxr-x--- 2 root root 4096 Nov 14 05:05 20191114
drwxr-x--- 2 root root 4096 Nov 15 05:05 20191115
drwxr-x--- 2 root root 4096 Nov 16 05:05 20191116
drwxr-x--- 2 root root 4096 Nov 17 05:05 20191117
drwxr-x--- 2 root root 4096 Nov 18 05:05 20191118
drwxr-x--- 2 root root 4096 Nov 19 05:05 20191119
그래서 여기에 있는 시간은 3일 이상입니다. 각 디렉토리에는 일부 텍스트 파일이 있습니다.
답변1
다음과 같이 보일 수 있습니다:
find . -mindepth 1 -maxdepth 1 -not -empty -type d -mtime +3 -exec rm -rf {} \;
touch
이 솔루션은 3일 이상 편집되지 않은 비어 있지 않은 레벨 1 디렉터리를 삭제합니다.
테스트하기 전에 데이터를 백업하십시오.
답변2
셸에서 zsh
수정 타임스탬프가 3일보다 오래된 비어 있지 않은 디렉터리는 파일 이름 와일드카드 패턴과 일치합니다./tmp
/tmp/*(/DNFm+3)
glob 한정자는 다음을 (/DNFm+3)
의미합니다.
- 디렉터리만 일치합니다( ; 한정자가 동일함을 의미하므로
/
이는 엄격하게 요구되지는 않습니다 ).F
- 숨겨진 이름 일치를 허용합니다(
D
;dotglob
의 쉘 옵션과 유사bash
). - 일치하는 항목이 없으면 아무것도 확장하지 않습니다( ; 의 셸 옵션과 유사
N
).nullglob
bash
- "전체"(비어 있지 않은) 디렉터리(
F
)만 포함합니다. - 다음에 대한 수정 타임스탬프만 포함됩니다.엄격하게3일 이상 전(
m+3
; 디렉토리의 경우 이는 며칠 전에 마지막 콘텐츠가 디렉토리에 추가되거나 제거되었음을 의미합니다.find
' 의 경우와 마찬가지로-mtime +3
이는4일 이상).
모든 일치 항목을 나열하려면 다음을 사용하십시오.
print -rC1 -- /tmp/*(/DNFm+3)
제거하려면 다음을 사용하십시오.
rm -rf -- /tmp/*(/DNFm+3)
그러한 일치 항목이 수천 개 있고 다음과 같은 항목이 발생하는 경우매개변수 목록이 너무 깁니다.오류가 발생하면 루프를 사용하십시오.
for dirpath in /tmp/*(/DNFm+3); do
rm -rf -- $dirpath
done
또는 다음을 사용하십시오 zargs
.
autoload zargs
zargs -- /tmp/*(/DNFm+3) -- rm -rf
또는 rm
내장 기능을 활성화하여 시스템 호출 제한을 zmodload zsh/files
해결하세요 .execve()