【发布时间】:2010-09-30 00:31:44
【问题描述】:
如何在 Perl 程序中复制符号链接(而不是它指向的文件),同时保留所有符号链接属性(例如所有者和权限)?
【问题讨论】:
如何在 Perl 程序中复制符号链接(而不是它指向的文件),同时保留所有符号链接属性(例如所有者和权限)?
【问题讨论】:
根据您关于绝对与相对目标路径、目录层次结构等的用例,使用link 创建指向您要复制的符号链接的硬链接也可能已经足够了。 Perl 在许多平台上也支持创建硬链接,不需要额外的包。
【讨论】:
模块File::Copy::Recursive 负责处理。默认情况下,它将复制符号链接并尝试保留所有权。
【讨论】:
在 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
【讨论】: