2012-02-01 11 views
0

ソース=/tmp/src にはa、b、c、dファイルが含まれています destinations = '/ one'、 '/ two'Python - ソースフォルダーから複数の宛先にファイルをコピーする最も速い方法は

ので、私はコピーするには、両方の目的地 '/ 1' と '2つの'

何か

よう
source = '/tmp/src' 
destinations = [] 

def copy_files_multiple_dest(source,destinations) 

右にa、b、c、dをファイル?

import os 
import shutil 


source = '/tmp/src/' 
destinations = [] 

def copy_files_multiple_dest(source,destinations): 
    sfiles = os.listdir(source) # list of all files in source 
    for f in sfiles: 
    for dest in destinations: 
     shutil.copy(os.path.join(source,f), dest) 

私はそれが最速だか分からないが、それは仕事をする必要があります。 は今、どのようなものについてはどのようにすべての宛先

+1

ファイルが分岐する必要がありますか?あなたは100%彼らが常にコピーの後で同じであることを確信しているなら、あなたはハードリンクに気づくかもしれません。 – Daenyth

+0

ソースは 'apt-get install'によって作成され、repoフォルダにあるものはすべて.debファイルにパッケージ化されているので、同じままです。 – kamal

答えて

1

からiは、ループだろう。一度だけのソースファイルを読み込み

+0

エラーが発生します[Errno 21]ディレクトリは '/ tmp/tmp/2/']のときに、エラーメッセージのように – kamal

+0

@kamalの上にコードが追加されていると、ディレクトリを移動しようとしています。 os.path.isfile(dest):.... – yurib

+0

argparseは文字列のみをサポートし、リストはサポートしないので、私は.strip()を使用しなければなりませんでした。私のコードでは、リスト内に区切られたディレクトリPATHを保存していました。 – kamal

1

はここに理にかなって:

def xcopy_to_multiple_destinations(srcDir, destinations): 
    for filename in os.listdir(srcDir): 
     with open(os.path.join(srcDir, filename), "rb") as srcFile: 
      for destDir in destinations: 
       with open(os.path.join(destDir, filename), "wb") as destFile: 
        # ...copy bytes from srcFile to destFile... 

あなたが再帰的にコピーしたい場合は、os.walkを使用します(他の質問を参照してください。Python recursive folder readを)。それに応じてソリューションを適合させることができます。

「最速」は広義語であることに注意してください。たとえば、ハードリンクはより速くなければなりません;)または適切なファイルシステムでのコピーオンライトを使用します。

1

osパッケージは、この新しいプロジェクトを入手するのが普通の方法ですが、https://github.com/amoffat/pbsです。 あなたがちょうど行うことができます:多分

import pbs 
destinations =['/one', '/two'] 
for destination in destinations: 
    pbs.copy("-R", '/tmp/src', destination) 

ない最速しかし、あなたは、ファイルが発散しないだろうと言うので、確かに美人コンテスト

+0

エラーが発生しています。 – kamal

0

を獲得、あなたはちょうどそれらをハードリンクすることができます。特にPythonは必要ありません。ここで私はbashでそれをやっています。

dests=(a b c d) 
for dest in "${dests[@]}"; do 
    cp -rl /source/root "$dest" 
done 

それはPythonのように持っている場合、そのモジュールにos.linkおよびその他の機能を見てください。

関連する問題