【发布时间】:2010-12-12 01:16:57
【问题描述】:
我正在使用 File::Copy 模块在 Perl 中复制文件:
#! /usr/bin/perl -w
use File::Copy;
copy("somefile.log", "copiedfile.log");
我想保留时间戳(尤其是修改时间),但这似乎不是一个选项。
有没有一种直接的方法来实现这一点而无需对“cp -p”进行系统调用?
【问题讨论】:
-
保存时间戳(使用 stat),复制并再次应用时间戳(使用 utime)不行吗? (与“触摸”命令相同)
-
James,您在 brian 的回答中发表评论:“如果庞大的 Perl 库没有“复制和保留属性”功能(适用于 Linux),我会感到惊讶”,您怎么看?意思是“在Linux上工作”?如果你在谈论 cp -p,Linux 的源代码完全按照我上面的建议,使用 stat 和 utime 来做“保留”。这里是: (*(x->xstat)) (src_path, &src_sb) ... utb.actime = src_sb.st_atime; utb.modtime = src_sb.st_mtime; utime (dst_path, &utb)
-
Murali,Perl 有一个干净的“复制和保留属性”命令 rmscopy(请参阅下面 ghostdog74 的答案),但它仅在 VMS 系统上可用。在 Windows 上,我相信 syscopy 会完成这项工作,因为我认为在 Windows 上复制文件的标准语义会保留时间戳。在 Linux 上情况并非如此,因此三行“copy、stat、utime”组合似乎是最干净的“纯 Perl”解决方案。这对我来说似乎不优雅,但似乎是唯一的选择,无需进行反引号系统调用。