2011-08-15 71 views
2

我以前見過這個問題的答案,但在搜索這裏之後,我找不到它。使用perl中的文件副本覆蓋符號鏈接

如何用它指向的文件副本替換現有的符號鏈接? 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是相同的(不復制)」

Is there一種可以用它的源文件的副本覆蓋符號鏈接的複製方法?

回答

2

我不認爲這是可能的一個單一的命令。下面是一個不涉及重新命名(很可能需要添加錯誤檢查)的解決方案:如果你發現自己做這個有很多

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

,你會發現它值得在一個方便的功能,這個包起來。

+0

謝謝,這似乎是最簡單的方法 –

+0

沒問題:)我應該提及 - 存儲readlink輸出很重要,因爲如果副本出現問題,您可以隨時恢復鏈接。 –

1

我不認爲有一個功能可以做到這一點 - 除非你自己寫。

我要做的就是:

  • 將文件複製到一個臨時在同一目錄
  • 取消鏈接文件
  • 重命名臨時原來的名稱

(有誤差當然,檢查每一步)。

如果事情出錯了,有一些風險可能會導致符號鏈接無法替換,但重命名應該是相當安全的(因爲它位於相同的目錄中,它將位於相同的文件系統/分區上) 。