2011-01-31 19 views
21

ファイルsrcをコピー先のdstにコピーしますが、srcがシンボリックリンクの場合は、ファイルの内容をコピーする代わりにリンクを維持してください。コピーが実行された後、os.readlinksrcdstの両方に対して同じ値を返す必要があります。Pythonでシンボリックリンクをコピーする

モジュールshutilは、copyfilecopycopy2などいくつかの機能を持っているが、これらのすべては、ファイルの内容をコピーし、リンクを保存しません。 shutil.moveは、元のファイルを削除するという事実以外の正しい動作をしています。

シンボリックリンクを維持しながらファイルコピーを実行する組み込みの方法はありますか?

答えて

38

ちょうど

def copy(src, dst): 
    if os.path.islink(src): 
     linkto = os.readlink(src) 
     os.symlink(linkto, dst) 
    else: 
     shutil.copy(src,dst) 

shutil.copytreeは何か似ていないが、senderleが述べたように、それがディレクトリのみではなく、単一のファイルのコピーについてうるさいです。

+1

これを行うには 'copytree'を使ってみましたが、' src'がディレクトリではないと不平を言うOSErrorがありました。私は 'os.path.islink'のチェックが本当に唯一の方法だと思っています。 – senderle

+1

symlinksを解決するのではなく保存しているファイルをコピーするための専用の機能はないと思っていますが、どちらも見つかりませんでした。これが唯一の方法だと思われます... –

関連する問題