用于清理旧备份文件的Bash脚本

时间:2013-11-19 03:04:05

标签: bash scripting backup dreamhost

我使用的是12 + 31备份系统 - 也就是说,我保留了过去一年每个月的一个文件,以及当月每天的一个文件。我很难搞清楚如何构建一个将执行以下清理的bash脚本:

  • 在远程SFTP服务器上搜索目录及其子目录
  • 在每个目录中,查找以下文件:不是本月,而不是上个月的第一个
  • 使用所选文件,将其从远程SFTP服务器上删除

例如,如果它现在是11月,则此脚本将:

  • 在我的远程SFTP服务器上搜索指定目标下的所有目录
  • 忽略11月创建的所有文件
  • 从10月1日起删除10月1日以来的所有文件
  • 从9月1日起删除9月1日以来的所有文件
  • 等...

这将在共享托管服务器(Dreamhost)上运行,因此我无法安装任何自定义CLI工具。

我的所有备份文件都包含文件名中的日期,但如果可能的话,我更愿意检查文件创建日期。

我在删除早于[x]的文件时看到了很多东西,但我一点也不清楚如何跳过本月第一天的文件。

1 个答案:

答案 0 :(得分:2)

这是我现在能想到的最好的:

find . -type f \         # files only
    -mtime +31 \         # exclude files less than 31 days old
    -printf '%Td %p\n' | # prepend filename with day of the month of last modification
  grep -v '^01' |
  sed 's/^[0-9][0-9] //'

一些警告:

  • 取决于GNU find
  • 排除过去31天内的文件,而不是严格排除当前月份
  • 查看上次修改时间,而不是创建时间。大多数文件系统不跟踪创建时间;如果你的话,你需要一些除GNU之外的工具才能访问它
  • 您的文件名不能有换行符