何千ものファイルを含むディレクトリがあります。
最新のファイルが削除されないように、作成日の降順でファイルを並べ替え、合計が特定の制限(たとえば10 GB)に達するまで、これらのファイルのサイズを合計する必要があります。
この目標が達成されたら、すべてのファイルを削除できる必要があります(既に降順でソートされています)。その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
実際に実行されたタスクを削除)
累積ディスク使用量では、通常のファイルのみが計算されます。同じファイルへの複数のハードリンクがある場合は、そのサイズも計算されます。