如何在Perl中复制符号链接?

时间:2009-01-07 12:04:16

标签: perl symlink

如何在保留所有符号链接属性(例如所有者和权限)的同时复制Perl程序中的符号链接(而不是它指向的文件)?

3 个答案:

答案 0 :(得分:8)

在Perl中,您可以使用readlink()函数找出符号链接的目的地。

您还可以使用lstat()函数来读取符号链接的权限(而不是stat(),它将读取符号链接指向的文件的详细信息)。

实际上,如果没有额外的帮助,就无法在新的符号链接上设置所有权,因为Perl不会公开lchown()系统调用。为此,您可以使用CPAN中的Perl Lchown模块。

假设有足够的权限(nb:未经检查的代码)

 use Lchown;
 my $old_link = 'path to the symlink';
 my $new_link = 'path to the copy';

 my $dst = readlink($old_link);
 my @stat = lstat($old_link);

 symlink $dst, $new_link;
 lchown $stat[4], $stat[5], $new_link;  # set UID and GID from the lstat() results

您无需担心符号链接上的权限 - 它们始终显示为-rwxrwxrwx

答案 1 :(得分:3)

模块File::Copy::Recursive负责处理。默认情况下,它会复制符号链接并尝试保留所有权。

答案 2 :(得分:0)

根据您的使用情况(绝对路径和相对目标路径,目录层次结构等),使用link创建指向您要复制的符号链接的硬链接可能已经足够。许多平台上的Perl都不需要额外的程序包,也不需要创建硬链接。