代码之家  ›  专栏  ›  技术社区  ›  Kim Stacks

如何根据Perl中的创建日期和时间删除文件?

  •  3
  • Kim Stacks  · 技术社区  · 15 年前

    我编写了一个Perl脚本来运行数据库备份。Perl脚本位于 福尔德,它正在工作。我只需要设置cronjob并每天运行一次Perl脚本。

    备份存储在名为的文件夹中 数据库备份 ,但是,我还想在Perl脚本中添加一个命令,以删除文件夹中的任何文件 比10天前的要老。

    我已到处搜索unix命令,但找不到任何符合我需要的命令。

    4 回复  |  直到 15 年前
        1
  •  10
  •   hobbs    15 年前

    if (-M $file > 10) { unlink $file }

    或者,再加上 File::Find::Rule

    my $ten_days_ago = time() - 10 * 86400;
    my @to_delete = File::Find::Rule->file()
      ->mtime("<=$ten_days_ago")
      ->in("/path/to/db_backup");
    unlink @to_delete;
    
        2
  •  5
  •   bart    15 年前

    在Unix上不能,因为

    你可能想退房 stat ,及 -M (修改时间)/ -C ( inode改变时间 -A (访问时间)如果您想要一个带有相对时间戳(多久以前)的简单表达式。

        3
  •  2
  •   pilcrow    15 年前

    退房 find(1) xargs(1) . 警告:在shell提示下,这些命令可能会改变您的生活。

    $ find /path/to/backup -type f -mtime +10 -print0 | xargs -0 echo rm -f
    

    当您确信它将实现您想要的功能(tm)时,请卸下 echo . 它大概是从 /path/to/backup ,查找其 时间 xargs ,将这些名称传递给 rm 成批地。

    ( print0 及其补充 -0 是GNU扩展——您提到您使用的是Linux——它允许您安全地处理文件名中的空白。)

        4
  •  0
  •   Shaggy Frog    15 年前

    您应该能够做到这一点,而无需使用Unix命令。循环浏览目录中的文件,使用 stat 在每个文件上获取文件的上次修改时间,然后使用 unlink