首先,我在shell脚本方面完全迷失了,所以我期待一个相当简单的解决方案。我只是不知道在哪里找到它。
情况是这样的:我们正在运行一个应用程序,我们从中进行备份(呃!)。该应用程序附带自己的备份脚本,运行时会创建一个文件夹,其中包含当前日期和时间的名称。其中包括数据库转储和一些类似的配置文件:
# 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(或者可能期望?)
答案 0 :(得分:2)
我会使用find命令代替管道。
生产服务器上的find /path/to/backups -mtime +1 -exec rm {} \;
和备份服务器上具有更高-mtime的相同命令。 IBM在其developerworks站点上有一个great resource for using find用于进一步阅读。
答案 1 :(得分:0)
以下内容将删除目录中最新项目以外的所有内容:
ls -lrt | grep -v total | awk '{print $9}' | head -n -1 | xargs rm
如果您需要X个剩余项目,可以将head -n -1
更改为head -n -X