如何在Perl中复制一个目录但忽略一些文件?

3

在我的Perl代码中,我需要将一个目录从一个位置复制到同一主机上的另一个位置,但要排除一些文件/模式(例如*.log, ./myDir/abc.cl)。 在所有平台上,用Perl完成这个任务的最佳方法是什么? 在Windows上,xcopy是一种解决方案。在Unix平台上,有没有办法用Perl来实现这个功能?


4
请看这里:https://dev59.com/zHVC5IYBdhLWcg3wpSzf。该链接讨论了如何在Perl中递归地复制目录并过滤文件名。 - codaddict
3个回答

5

我认为你正在寻找rsync。它不是Perl,但它比任何你用Perl制作的东西都要好得多:

% rsync --exclude='*.log' --exclude='./myDir/abc.cl' SOURCE DEST

如果你有一堆模式,你可以把它们都放在一个文件中:
*.log
./myDir/abc.cl

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

2

我会使用File::Find,遍历每个文件,但不是在每个文件上调用File::Copycopy()函数,而是先测试是否符合模式,如果符合就跳过next


1
在*nix系统中,您可以使用本地的tar命令,并使用排除选项(-exclude options)。然后,在创建tar文件后,您可以将其传输到目标位置并解压缩。

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