3일이 넘은 비어 있지 않은 폴더 찾기 및 삭제

3일이 넘은 비어 있지 않은 폴더 찾기 및 삭제

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).nullglobbash
  • "전체"(비어 있지 않은) 디렉터리( 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()

관련 정보