source = / tmp / src 包含a,b,c,d文件 destinations ='/ one','/ two'
所以我想将文件a,b,c,d复制到两个目的地'/ one'和'two'
类似
source = '/tmp/src'
destinations = []
def copy_files_multiple_dest(source,destinations)
对吗?
现在,我将如何遍历所有目的地
答案 0 :(得分:1)
如下:
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 :(得分: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)。您可以相应地调整解决方案。
请注意,“最快”是一个广义的术语。例如,硬连接应该更快;或者使用适当的文件系统进行写时复制。
答案 2 :(得分:1)
os包是通常的方法,但看看这个新项目https://github.com/amoffat/pbs。 你可以这样做:
import pbs
destinations =['/one', '/two']
for destination in destinations:
pbs.copy("-R", '/tmp/src', destination)
也许不是最快但肯定会赢得选美比赛
答案 3 :(得分:0)
由于您说文件不会分歧,您可以将它们硬链接。你不需要专门的python,这就是我在bash中的表现。
dests=(a b c d)
for dest in "${dests[@]}"; do
cp -rl /source/root "$dest"
done
如果必须是python,请查看os.link
以及该模块中的其他函数。