我的webapp托管在使用MySQL作为数据库的unix服务器上。
我写了一个Perl脚本来运行我的数据库备份。 Perl脚本位于 cgi-bin folde中,它正在运行。我只需要设置cronjob并每天运行一次Perl脚本。
备份存储在名为 db_backups 的文件夹中。但是,我还想在我的Perl脚本中添加一个命令来删除文件夹 db_backups 中比10天前更早的文件。
我搜索了unix命令的高低,找不到符合我需要的东西。
答案 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)