폴더 전체 크기가 10G를 초과하는 경우 폴더에서 가장 오래된 파일을 삭제하세요.

폴더 전체 크기가 10G를 초과하는 경우 폴더에서 가장 오래된 파일을 삭제하세요.

다음 구문은 폴더 아래의 파일을 삭제합니다 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

?

관련 정보