16

私が基本的にやりたいことは、cp -Rl dir1 dir2. しかし、私が理解しているように、pythonはshutils.copytree(src,dst)実際にファイルをコピーするものだけを提供しますが、代わりにファイルをハードリンクする可能性はありません.

cpモジュールを使用してコマンドを呼び出すことができることは知っていsubprocessますが、よりクリーンな (pythonic) 方法を見つけたいと思っています。

そうする簡単な方法はありますか、それともディレクトリを再帰的に自分で実装する必要がありますか?

4

2 に答える 2

24

呼び出すだけos.system("cp -Rl dir1 dir2")で、独自の関数を手書きする必要はありません。

編集済み:Pythonでこれを実行したいので。

あなたは正しいです:それはモジュールで利用可能ですshutil

shutil.copytree(src, dst, copy_function=os.link)
于 2012-05-28T03:07:03.933 に答える
7

これは純粋な python ハードコピー関数です。と同じように動作するはずですcp -Rl src dst

import os
from os.path import join, abspath

def hardcopy(src, dst):
    working_dir = os.getcwd()
    dest = abspath(dst)
    os.mkdir(dst)
    os.chdir(src)
    for root, dirs, files in os.walk('.'):
        curdest = join(dst, root)
        for d in dirs:
            os.mkdir(join(curdst, d))
        for f in files:
            fromfile = join(root, f)
            to = join(curdst, f)
            os.link(fromfile, to)
    os.chdir(working_dir)
于 2012-05-28T08:23:22.580 に答える