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

时间:2009-08-23 08:17:24

标签: perl file

我的webapp托管在使用MySQL作为数据库的unix服务器上。

我写了一个Perl脚本来运行我的数据库备份。 Perl脚本位于 cgi-bin folde中,它正在运行。我只需要设置cronjob并每天运行一次Perl脚本。

备份存储在名为 db_backups 的文件夹中。但是,我还想在我的Perl脚本中添加一个命令来删除文件夹 db_backups 中比10天前更早的文件。

我搜索了unix命令的高低,找不到符合我需要的东西。

4 个答案:

答案 0 :(得分:9)

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;

答案 1 :(得分:4)

在Unix上你不能,因为文件的创建日期没有存储在文件系统中

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

答案 2 :(得分:2)

  

我搜索了unix命令的高低   并找不到符合我需要的东西。

结帐find(1)xargs(1)。警告:这些命令可能会在shell提示符下改变您的生活。

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

如果您确信自己会做什么(tm),请删除echo。它粗略地说,从/path/to/backup开始,寻找 mtime 大于10天的普通文件,并将其名称打印到xargs,这会将这些名称传递给rm分批。

print0及其补充-0是GNU扩展 - 你提到你在Linux上 - 这可以让你安全地处理文件名中的空格。)

答案 3 :(得分:0)

你应该能够在不使用Unix命令的情况下完成它。循环遍历目录中的文件,在每个文件上使用stat以获取文件的最后修改时间,然后使用文件上的unlink删除它,如果它比您想要的更旧。