首先,当涉及到shell脚本时,我完全迷失了方向,所以我期待着一个相当简单的解决方案。我只是不知道在哪里能找到它。
情况是这样的:我们正在运行一个应用程序,从中进行备份(duh!)。该应用程序自带备份脚本,运行时会创建一个以当前日期和时间为名称的文件夹。其中有一个数据库转储和一些配置文件,比如:
# cd backup
# ll
drwxr-xr-x 2 root root 4096 Mar 6 02:30 2012-03-06_02-15
# ll 2012-03-06_02-15
-rw-r--r-- 1 root root 26706579 Mar 6 02:16 Application.tar.gz
-rw-r--r-- 1 root root 26060 Mar 6 02:15 Config.tar.gz
-rw-r--r-- 1 root root 5503574530 Mar 6 02:21 DatabaseBackup.sql.gz
然后将备份文件夹rsync到网络驱动器。
该脚本还允许使用一个参数来表示备份要保留的天数。这太棒了。但现在我们开始看到生产服务器上磁盘空间的问题。
复制脚本功能以转储数据库和压缩配置不是问题。
但我迷失了方向:理想情况下,我希望在生产服务器上保留最新备份,在网络驱动器上保留X个备份。
我认为使用bash(或者可能期望?)
我将使用find命令而不是管道。
类似于:生产服务器上的find /path/to/backups -mtime +1 -exec rm {} ;
和备份服务器上具有更高-mtime的相同命令。IBM有一个很好的资源可以在他们的developerworks网站上使用find进行进一步的阅读。
以下操作将删除目录中除最新项目外的所有内容:
ls -lrt | grep -v total | awk '{print $9}' | head -n -1 | xargs rm
如果您需要X个剩余项目,您可以将head -n -1
更改为head -n -X