在Perl中将列表/数组中的文件移动到目标文件夹

3
使用Perl编写的代码
use File::Find::Rule;

my @files = File::Find::Rule->file()
                            ->mtime('<=' . (time() - 3600))
                            ->in("/source/directory/path");

我得到了一个源目录中未在至少一小时内修改的文件列表。

最简单的将这些文件移动到目标文件夹的方法是什么?错误处理也很重要。

我是否需要使用循环逐个移动这些文件,或者有没有更好、更优雅且安全的方法来完成这个任务?

1个回答

3

可行的解决方案:

use File::Find::Rule;
use File::Copy;

my @files = File::Find::Rule
              ->file()
              ->mtime('<=' . (time() - 3600))
              ->exec( sub { 
                            my $r = move($_[2], "/destination/directory/path");
                            print STDERR "$_[2]\t$!\n" if !$r;
                            $r
                          }
                    )
              ->in("/source/directory/path");

1
你可以使用 warn 代替 print STDERR - friedo
只有在目录结构是平面的情况下,或者您希望目标目录是平面的情况下,此方法才有效。否则,您必须首先确保在目标中创建子目录,例如使用File::Path中的mkpath函数。 - Slaven Rezic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接