Bash脚本 - 需要从目录中删除文件,直到目录大小小于8 TB

时间:2016-02-16 06:02:15

标签: linux bash awk do-while du

以下是我需要创建bash脚本的高级场景。

  • 服务器 - /sasdata2/SAS-USERS/PBU/
  • 上的目录
  • 上述目录的大小不应超过8 TB
  • 如果大小超过8 TB,则需要按“创建/修改”日期删除最旧的文件,以使大小恢复到8 TB。
  • 此主目录中的多个子目录,但不应从子目录中删除任何内容。只能删除主目录中的文件。

下面是我正在使用的脚本,但它在while语句中进行了无限循环。需要您帮助制作上述场景的脚本。

while [ "$(du -shb /sasdata2/SAS-USERS/PBU | awk '{print $1}')" -gt 900 ]
do
  find /sasdata2/SAS-USERS/PBU -maxdepth 0 -type f -printf '%T@\t%p\n' | \
  sort -n | head -n 25 | cut -d $'\t' -f 2-  | xargs -d '\n' rm -f
done

1 个答案:

答案 0 :(得分:1)

我认为你的状况是错误的。 du -b会给你字节,为什么比较900?

此外,为什么你需要在du上循环并删除任意25个文件?用du计算多少字节超过8TB,然后ls -ltr并在循环中删除文件并将它们的大小相加直到达到超过字节