累積サイズがxGBを超える場合にのみ、ディレクトリ内のファイルを削除してください。

累積サイズがxGBを超える場合にのみ、ディレクトリ内のファイルを削除してください。

何千ものファイルを含むディレクトリがあります。

最新のファイルが削除されないように、作成日の降順でファイルを並べ替え、合計が特定の制限(たとえば10 GB)に達するまで、これらのファイルのサイズを合計する必要があります。

この目標が達成されたら、すべてのファイルを削除できる必要があります(既に降順でソートされています)。その10GBファイルの後。

その後、実行した後、私のディレクトリの内容は次のようになります。10GB以下フルサイズですが、最新のファイルをアーカイブする必要があります。

私はこれを完了できるはずです。GAWKを使用しないGNUシステムがないからです。

コマンドだけでこれは可能ですかfind

答え1

そしてzshst_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実際に実行されたタスクを削除)

累積ディスク使用量では、通常のファイルのみが計算されます。同じファイルへの複数のハードリンクがある場合は、そのサイズも計算されます。

関連情報