【问题标题】:FTP - Only want to keep latest 10 files - delete LRUFTP - 只想保留最新的 10 个文件 - 删除 LRU
【发布时间】:2009-07-06 19:39:15
【问题描述】:

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

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

任何建议将不胜感激。

谢谢,

【问题讨论】:

    标签: unix ftp automation shell backup


    【解决方案1】:

    执行此类操作的一种方法是在文件名中使用星期几:

    • backup-mon.tgz
    • backup-tue.tgz

    然后,当您备份时,您将删除或覆盖一周中当天的备份文件。

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

    【讨论】:

    • 哈哈,其实还蛮优雅的。感谢您的建议。
    【解决方案2】:

    您是否具有对 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
    

    【讨论】:

    • ls -tr|while read FILE do ...... done 或设置 IFS 来处理带有空格的文件。
    【解决方案3】:
    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`
    

    【讨论】:

      【解决方案4】:

      如果你要走 shell 路径,试试这个:

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

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

      【讨论】:

      • 附注我只是重申这几乎是卡雷尔回答的重复 - 对此感到抱歉。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2023-03-10
      • 2022-07-19
      相关资源
      最近更新 更多