2011-08-15 9 views
2

でファイルのコピーとシンボリックリンクを上書き私は前にこの質問への答えを見て思ったが、ここでは検索とGoogleの後、私はそれを見つけることができません。perlの

どのようにそれが指すファイルのコピーで、既存のシンボリックリンクを置き換えますか? IEはリンクを介してソースファイルをコピーします。私はちょうどcopy()を使用することはできません理由は、上書きをサポートしていないようだということである

/path/to/file.txt 
/link/path/file.txt 

この

/path/to/file.txt 
/link/path/file.txt -> /path/to/file.txt 

でスタート後copy('/path/to/file.txt', '/link/path/file.txt');のようなものを呼び出し、これを取得しますそのソースファイルとシンボリックリンクそれは彼らが同じものだと考えて、エラーを与えるとして、「XXXXXとYYYYYが同一である(コピーされません)」

がありますシンボリックリンクをソースファイルのコピーで上書きできるcopyのようなメソッド?

答えて

2

私はそれが単一のコマンドで可能だとは思いません。ここでは(おそらくエラーチェックに追加する必要があります)名前を変更関与しないソリューションです:

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

あなた自身がこのロットをやって見つけた場合は、あなたはそれが価値のある便利な機能でこれをラップするかもしれません。最も簡単な方法のように思える

+0

おかげで、 –

+0

問題ありません:)私は言及する必要があります - 何かがコピーでうまくいかない場合、あなたは常にリンクを復元することができますので、それはREADLINK出力を格納することが重要です。 –

1

私はこれを行うことができ、単一の機能がないと思う - あなたはそれを自分で書く場合を除きます。

私は何をすることです:

  • コピーを同じディレクトリ
  • で一時的にファイルには、ファイルのリンクを解除し
  • はエラーで(元の名前に一時的

の名前を変更しますもちろん、各ステップをチェックしてください)。

もし何かが間違っていると、シンボリックリンクを壊して置き換えられない危険性がありますが、名前はかなり安全です(同じディレクトリにあり、同じファイルシステム/パーティション上にあるため) 。