다음 구문은 폴더 아래의 파일을 삭제합니다 hive
.
/usr/bin/find /var/log/hive -type f -print -delete
나는 다음을 수행하려고합니다 :
/var/log/hive
폴더 크기가 다음보다 큰 경우 가장 오래된 파일만 삭제하세요.10G
참고 - 하이브 폴더 하위 크기가 정확히 10G이면 삭제 프로세스가 중지되므로 크기가 10G를 초과하면 정리 프로세스가 시작됩니다.
find 명령이나 다른 방법을 사용하여 이 솔루션을 만들 수 있습니까?
답변1
GNU 시스템에서는 다음을 수행할 수 있습니다.
cd /var/log/hive &&
find . -type f -printf '%T@ %b :%p\0' |
sort -zrn |
gawk -v RS='\0' -v ORS='\0' '
BEGIN {max = 10 * 1024 * 1024 * 1024} # 10GiB; use max=10e9 for 10GB
{du += 512 * $2}
du > max {
sub("[^:]*:", ""); print
}' | xargs -r0 echo rm -f
즉, 일반 파일을 마지막 수정 시간(최신 항목부터 가장 오래된 항목 순)으로 정렬한 다음 누적 디스크 사용량을 계산하고(여기에 하드 링크가 없다고 가정) 10GiB 임계값을 초과하면 각 파일을 삭제합니다.
카탈로그 파일 자체의 크기는 고려되지 않습니다. 일반 파일의 디스크 사용량만 고려합니다.
echo
결과가 만족스러우면 제거하세요.
한 줄:
find . -type f -printf '%T@ %b :%p\0' |sort -zrn|gawk -vRS='\0' -vORS='\0' '{du+=512*$2};du>10*(2^30){sub("[^:]*:","");print}'|xargs -r0 echo rm -f
모든 일반 파일의 누적 디스크 사용량이 10GiB를 초과하는 경우 *.wsp 파일만 삭제하려면 wsp가 아닌 파일을 먼저 나열해야 합니다. 동시에 이전에 손실된 디렉터리 및 기타 비정규 파일의 디스크 사용량도 고려할 수 있습니다.
cd /var/log/hive &&
find . \( -type f -name '*.wsp' -printf WSP -o -printf OTHER \) \
-printf ' %T@ %b :%p\0' |
sort -zk 1,1 -k2,2rn |
gawk -v RS='\0' -v ORS='\0' '
BEGIN {max = 10 * 1024 * 1024 * 1024} # 10 GiB
{du += 512 * $3}
du > max && $1 == "WSP" {
sub("[^:]*:", ""); print
}' | xargs -r0 echo rm -f
답변2
이 시도,
옵션 1:90일이 넘고 10G보다 큰 폴더 삭제
find /var/log/hive -size +10G -mtime +90 -type f -print -delete
옵션 2:가장 오래된 폴더 삭제
find /var/log/hive -size +10G -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d" " -f2 | xargs rm
답변3
어때요?
while test "$(du -s /var/log/hive | cut -f1)" -gt 10000000 ; do rm -i /var/log/hive/"$(ls -t /var/log/hive | tail -1)" ; done
?