Unix FTP-只想保留最新的10个文件-删除LRU

Unix FTP-只想保留最新的10个文件-删除LRU,unix,ftp,automation,shell,backup,Unix,Ftp,Automation,Shell,Backup,我已经创建了一个shell脚本来备份我的webfiles+数据库转储,将其放入tar存档并将其FTP到异地。我想每周运行X次,但是我只想在FTP站点上保留最新的10次备份 我怎样才能做到最好?我应该在shell脚本端完成这项工作,还是有一个FTP命令来检查上次修改和管理的事情 如有任何建议,将不胜感激 谢谢,这样做的一种方法是在文件名中使用星期几: backup-mon.tgz backup-tue.tgz 等等 然后,在备份时,您将删除或覆盖一周中当前日期的备份文件 (当然,这种方法只能获

我已经创建了一个shell脚本来备份我的webfiles+数据库转储,将其放入tar存档并将其FTP到异地。我想每周运行X次,但是我只想在FTP站点上保留最新的10次备份

我怎样才能做到最好?我应该在shell脚本端完成这项工作,还是有一个FTP命令来检查上次修改和管理的事情

如有任何建议,将不胜感激


谢谢,

这样做的一种方法是在文件名中使用星期几:

  • backup-mon.tgz
  • backup-tue.tgz
  • 等等
然后,在备份时,您将删除或覆盖一周中当前日期的备份文件


(当然,这种方法只能获取最新的7个文件,但这是一种非常简单的方法)

这样做的一种方法是在文件名中使用星期几:

  • backup-mon.tgz
  • backup-tue.tgz
  • 等等
然后,在备份时,您将删除或覆盖一周中当前日期的备份文件


(当然,这种方式只能获取最新的7个文件,但这是一种非常简单的方法)

您有FTP服务器的shell访问权限吗?如果是这样,我相信您可以编写一个脚本来执行此操作,并安排一个cron作业来执行定期清理

以下是一些应该有效的方法:

num_files_to_keep=10
i=0

for file in `ls -tr`; do
    if [ $i -ge $num_files_to_keep ]; then
        rm $file;
    fi;
    i=`expr $i + 1`;
done

您是否具有FTP服务器的shell访问权限?如果是这样,我相信您可以编写一个脚本来执行此操作,并安排一个cron作业来执行定期清理

以下是一些应该有效的方法:

num_files_to_keep=10
i=0

for file in `ls -tr`; do
    if [ $i -ge $num_files_to_keep ]; then
        rm $file;
    fi;
    i=`expr $i + 1`;
done
不幸的是,如果在少于10个文件的情况下执行,它会在每次执行时删除最旧的文件(因为在“较旧或相等”的较新测试中添加了“严格较旧”选项),这可以通过先检查:

[ `ls|wc -l` -gt 10 ] && find . \! -newer `ls -t|head -n 10|tail -n 1`
不幸的是,如果在少于10个文件的情况下执行,它会在每次执行时删除最旧的文件(因为在“较旧或相等”的较新测试中添加了“严格较旧”选项),这可以通过先检查:

[ `ls|wc -l` -gt 10 ] && find . \! -newer `ls -t|head -n 10|tail -n 1`

如果要走shell路径,请尝试以下方法:

find /your-path/ -mtime +7 -type f -exec rm -rf {} \;

这将删除超过某个日期的所有内容(在本例中为7天)。可能更相关,这取决于您是否需要在一天内保留多个备份。例如,昨天我对同一个网站进行了十次修订。

如果您选择shell路径,请尝试以下操作:

find /your-path/ -mtime +7 -type f -exec rm -rf {} \;

这将删除超过某个日期的所有内容(在本例中为7天)。可能更相关,这取决于您是否需要在一天内保留多个备份。例如,昨天我对同一网站进行了十次修订。

哈哈,这实际上相当优雅。感谢您的建议。哈哈,这实际上相当优雅。感谢您的建议。ls-tr |在读取文件时做……完成或设置IFS以处理文件with white spaces.ls-tr | while read FILE do…done或set IFS来处理带有空格的文件。p.s.我刚刚重新解释了这几乎是Karel答案的重复-抱歉。p.s.我刚刚重新解释了这几乎是Karel答案的重复-抱歉。