在Perl中,如何复制目录而忽略某些文件?

在Perl中,如何复制目录而忽略某些文件?,perl,copy,Perl,Copy,在我的Perl代码中,我需要将目录从一个位置复制到同一主机上的另一个位置,不包括一些文件/模式(例如.*.log、./myDir/abc.cl)。 在所有平台上用Perl实现这一点的最佳方式是什么? 在Windows上,xcopy就是这样一种解决方案。在unix平台上,有没有用Perl实现这一点的方法?我会使用文件::查找,然后逐步检查每个文件,但不是对每个文件调用文件::复制的复制(),首先测试它是否与模式匹配,如果匹配,然后再测试下一步。我认为您正在寻找。它不是Perl,但它将比您在Perl

在我的Perl代码中,我需要将目录从一个位置复制到同一主机上的另一个位置,不包括一些文件/模式(例如.*.log、./myDir/abc.cl)。 在所有平台上用Perl实现这一点的最佳方式是什么?
在Windows上,xcopy就是这样一种解决方案。在unix平台上,有没有用Perl实现这一点的方法?

我会使用
文件::查找
,然后逐步检查每个文件,但不是对每个文件调用
文件::复制
复制()
,首先测试它是否与模式匹配,如果匹配,然后再测试
下一步

我认为您正在寻找。它不是Perl,但它将比您在Perl中制作的任何东西都好得多:

% rsync --exclude='*.log' --exclude='./myDir/abc.cl' SOURCE DEST
如果您有一组模式,可以将它们全部放在一个文件中:

*.log
./myDir/abc.cl
% rsync --exclude-from=do_not_sync.txt SOURCE DEST
现在忽略文件中的所有模式:

*.log
./myDir/abc.cl
% rsync --exclude-from=do_not_sync.txt SOURCE DEST

在*nix上,可以使用本机tar命令。然后,在创建tar文件后,您可以将其带到您的目的地以解除tar。

请参见: