Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用perl中的文件副本覆盖符号链接_Perl_Symlink - Fatal编程技术网

用perl中的文件副本覆盖符号链接

用perl中的文件副本覆盖符号链接,perl,symlink,Perl,Symlink,我以为我以前见过这个问题的答案,但在这里和谷歌搜索后,我就是找不到 如何将现有符号链接替换为它指向的文件的副本?IE通过链接复制源文件 从这个开始 /path/to/file.txt /link/path/file.txt -> /path/to/file.txt 然后调用copy('/path/to/file.txt','/link/path/file.txt')并获取以下内容: /path/to/file.txt /link/path/file.txt 我不能只使用copy()的原

我以为我以前见过这个问题的答案,但在这里和谷歌搜索后,我就是找不到

如何将现有符号链接替换为它指向的文件的副本?IE通过链接复制源文件

从这个开始

/path/to/file.txt
/link/path/file.txt -> /path/to/file.txt
然后调用
copy('/path/to/file.txt','/link/path/file.txt')并获取以下内容:

/path/to/file.txt
/link/path/file.txt
我不能只使用
copy()
的原因是它似乎不支持用源文件覆盖符号链接,因为它认为它们是相同的东西,并给出错误“XXXXX和YYYY相同(未复制)”


有没有像copy这样的方法可以用源文件的副本覆盖符号链接?

我认为没有一个函数可以做到这一点,除非你自己编写

我所做的是:

  • 将文件复制到同一目录中的临时文件夹
  • 取消文件链接
  • 将临时文件重命名为原始名称
(当然,每个步骤都有错误检查)


如果出现问题,您可能会使用核弹攻击符号链接并无法替换它,但重命名应该是相当安全的(因为它位于同一目录中,它将位于同一文件系统/分区上)。

我认为不可能只使用一个命令。这里有一个不涉及重命名的解决方案(您可能应该添加错误检查):


如果您经常这样做,您可能会发现用一个方便的函数来包装它是值得的。

谢谢,这似乎是最简单的方法没有问题:)我应该提到——存储readlink输出很重要,因为如果副本出现问题,您可以随时恢复链接。
$linkLoc = readlink('/link/path/file.txt');
unlink('/link/path/file.txt');
copy($linkLoc, '/link/path/file.txt');