在Perl程序中如何复制一个符号链接(而不是指向的文件),同时保留所有符号链接属性(例如所有者和权限)?
readlink()
函数查找符号链接的目标。
您还可以使用lstat()
函数读取符号链接的权限(与stat()
不同,后者将读取符号链接指向的文件的详细信息)。
实际上,在没有额外帮助的情况下无法设置新符号链接的所有权,因为Perl不公开lchown()
系统调用。对此,您可以使用来自CPAN的Perl Lchown
模块。
假设有足够的权限(注意:未经检查的代码)
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
根据您的使用情况,涉及绝对路径与相对目标路径、目录层次结构等,使用link创建到要复制的符号链接的硬链接可能已经足够了。无需额外的软件包,Perl在许多平台上也支持创建硬链接。