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

时间:2011-08-15 20:44:14

标签: 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()的原因是它似乎不支持用它的源文件覆盖符号链接,因为它认为它们是相同的并且给出错误“XXXXX和YYYYY是相同(未复制)“

是否有类似copy的方法可以使用其源文件的副本覆盖符号链接?

2 个答案:

答案 0 :(得分:2)

我认为单一命令不可能。这是一个不涉及重命名的解决方案(你应该添加错误检查):

$linkLoc = readlink('/link/path/file.txt');
unlink('/link/path/file.txt');
copy($linkLoc, '/link/path/file.txt');

如果你发现自己做了很多这样的事情,你可能会发现将它包装在一个方便的功能中是值得的。

答案 1 :(得分:1)

我不认为有一个功能可以做到这一点 - 除非你自己写。

我的工作是:

  • 将文件复制到同一目录中的临时文件
  • 取消链接文件
  • 将临时名称重命名为原始名称

(当然,每次执行错误检查)。

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