디스크 정리의 일환으로 이제 지난 3일(현재 영업일이 아님)에 생성된 모든 폴더와 해당 콘텐츠를 삭제해야 합니다.
예 - 오늘 날짜가 20191121이면 다음과 같습니다.
/opt/png/wsm/data/workdir/batch/*20191120*
/opt/png/wsm/data/workdir/batch/*20191119*
/opt/png/wsm/data/workdir/batch/*20191118*
지금 내가 할 수 있는 일은 목록을 얻는 것뿐입니다.
ls -d */ | grep 20191118 (and then 19 and 20)
특정 날짜에 폴더와 해당 내용을 삭제하여 얼마나 많은 크기를 저장할 수 있는지 확인하는 방법은 무엇입니까?
서버의 bash 버전은 다음과 같습니다.
bash-3.2$ bash --version
GNU bash, version 3.2.57(1)-release (i386-pc-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.
답변1
파일과 폴더를 정리할 때 이 명령을 사용해야 할 수도 있습니다 du
.
du
드라이브 공간 사용량을 나열합니다.--time
선택의 여지 가 있다, 그리고 사용할 수 있습니다디렉토리에만 적용. 그것들을 결합하십시오:
du -h */ --time | grep -E '2019\-09\-(18|19|20)'
이는 11월 18일, 19일 또는 20일에 콘텐츠가 마지막으로 생성되거나 수정된 모든 하위 디렉터리를 검색합니다. 크기( -h
사람이 읽을 수 있음), 수정 날짜 및 마지막으로 경로가 출력됩니다.
답변2
rm하려는 디렉토리에 5000개 이상의 파일이 포함되어 있으면 이전 답변은 실패합니다. 그러면 삭제되지 않은 이전 디렉터리가 남게 됩니다.
호출당 최대 5000개의 인수를 사용하여 rm을 한 번 이상 호출하는 "-exec rm {} \+" 대신 find를 사용하십시오.
수정된 파일/디렉토리를 찾으려면 find를 사용하십시오.
find . -type d -atime n # for exact number of days
find . -type d -atime +n # for greater than n days
-daystart 옵션을 추가하면 24시간 전이 아닌 오늘부터 시간을 측정할 수 있습니다.
그런 다음 "-exec rm {} \+"를 사용하여 삭제하거나 "-exec du -sh {} \;"를 사용하여 각 디렉터리의 디스크 사용량을 가져옵니다.
또한 검색을 최상위 디렉토리로 제한하려면 find + du 호출의 -maxlength 옵션을 고려하세요.
자세한 내용은 "man find"를 참조하세요(터미널에서(가급적)) 또는 man7.org에서 최신 매뉴얼 페이지를 받으세요:http://man7.org/linux/man-pages/man1/find.1.html, 그러나 Die.net에서는 그렇지 않습니다(페이지 타임스탬프도 제거했기 때문에 매뉴얼 페이지가 오래되었거나 만료되었는지 알 수 없습니다).
답변3
그런 다음 @Kusalananda의 솔루션을 더 짧고 (내 관점에서 볼 때) 더 읽기 쉬운 구문을 제공하고 gdate 대신 날짜를 사용하십시오(gdate가 Solaris에서 날짜와 동일할 수 있지만).
days=$(echo -e "1 day ago \n 2 days ago \n 3 days ago" | date -f - +'%Y%m%d')
dpath="/opt/png/wsm/data/workdir/batch"
for day in $days ; do
du -s -h "$dpath/$day"
rm -r -f "$dpath/$day"
done
답변4
Solaris 시스템에 zsh가 있는 경우 bash
일반적으로 zsh도 있습니다.
<start-end>
이 날짜 형식은 숫자처럼 정렬되므로 zsh의 십진수 범위 전역 연산자를 사용할 수 있습니다 .
zsh -c '
zmodload zsh/datetime
now=$EPOCHSECONDS day=$(( 24 * 60 * 60 ))
for var t (start $(( now - 3*day )) end $(( now - 1*day )) )
strftime -s $var %Y%m%d $t
range="<$start-$end>"
rm -rf -- *$~range*(/)
'
일광 절약 시간이 전환되는 한밤중에 실행하는 경우 현재 시간에서 24*60*60초를 빼면 같은 날 또는 2일 전에 실행될 수 있습니다.
c
이러한 디렉터리에 대한 누적 디스크 사용량을 얻으려면 삭제 후 회수될 공간의 양은 해당 디렉터리의 파일이 다른 곳에 하드 링크가 있는지 여부에 따라 달라집니다 rm -rf
.du -c