仅当文件大小累计超过xGB时才删除目录中的文件

仅当文件大小累计超过xGB时才删除目录中的文件

我有一个目录,其中包含数千个文件。

我需要按创建日期的降序对文件进行排序(以确保最新的文件不会被删除),并开始对这些文件的大小求和,直到总和达到一定的限制(例如 10GB)。

一旦达到这个目标,我需要能够删除所有文件(已经按降序排序),那些 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实际执行的操作)。

注意,在累计磁盘使用量中,它只统计普通文件,如果同一个文件有多个硬链接,则它们的大小都会被统计。

相关内容