如果文件夹总大小超过10G,则删除文件夹中最旧的文件

如果文件夹总大小超过10G,则删除文件夹中最旧的文件

以下语法将删除文件夹下的文件hive

/usr/bin/find /var/log/hive -type f -print -delete

我正在尝试执行以下操作:

/var/log/hive仅当文件夹大小大于时才删除最旧的文件10G

注意 - 当 hive 文件夹下的大小正好是 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

相关内容