
디스크 정리의 일환으로 이제 지난 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개 이상의 파일이 포함되어 있으면 이전 답변은 실패합니다. 그러면 삭제되지 않은 오래된 디렉토리가 남게 됩니다.
대신 find를 "-exec rm {} \+"와 함께 사용하면 각 호출에 대해 최대 5000개의 인수로 rm을 한 번 이상 호출합니다.
수정된 파일/디렉토리를 찾으려면 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 옵션을 고려하여 최상위 수준의 디렉터리로 find를 제한하세요.
자세한 내용은 "man find"를 참조하십시오(최신 매뉴얼 페이지를 얻으려면 터미널(best) 또는 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 시스템에 가 있으면 bash
일반적으로 zsh도 있습니다.
<start-end>
해당 날짜 형식은 숫자처럼 정렬되므로 zsh의 십진수 범위 glob 연산자를 사용할 수 있습니다 .
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
. 제거한 후 회수될 공간의 양은 해당 디렉토리의 파일이 다른 곳에 하드링크를 가지고 있는지 여부에 따라 달라집니다.