누적 크기가 xGB를 초과하는 경우에만 디렉터리의 파일을 삭제하세요.

누적 크기가 xGB를 초과하는 경우에만 디렉터리의 파일을 삭제하세요.

수천 개의 파일이 포함된 디렉토리가 있습니다.

최신 파일이 삭제되지 않도록 생성 날짜의 내림차순으로 파일을 정렬하고 합계가 특정 제한(예: 10GB)에 도달할 때까지 이러한 파일의 크기를 합산해야 합니다.

이 목표가 달성되면 모든 파일을 삭제할 수 있어야 합니다(이미 내림차순으로 정렬되어 있음).그 10GB 파일 이후.

그런 다음 실행한 후 내 디렉토리의 내용은 다음과 같아야 합니다.10GB 이하전체 크기이지만 최신 파일을 보관해야 합니다.

나는 이 일을 완수할 수 있어야 해요GAWK를 사용하지 않음GNU 시스템이 없기 때문입니다.

명령만으로 이것이 가능 합니까 find?

답변1

그리고 zsh그리고st_blocks시스템 호출에 의해 반환된 속성이 lstat()512바이트 단위로 표현되는 시스템 및 파일 시스템에서(대부분):

#! /usr/bin/env zsh
zmodload zsh/stat || exit
zmodload zsh/files || exit # for a builtin rm as well.

disk_usage=0 threshold=$(( 10 * 2**30 ))

set -- **/*(ND.om)
for f do
  stat -LA blocks +block -- $f &&
    (( (disk_usage += blocks * 512) > threshold )) &&
    break
  shift
done
(( $# == 0 )) || print -r rm -f -- "$@"

( print -r실제 수행된 작업 제거)

누적 디스크 사용량에서는 일반 파일만 계산됩니다. 동일한 파일에 대한 하드 링크가 여러 개 있는 경우 해당 크기도 계산됩니다.

관련 정보