在Python中复制递归文件

时间:2012-09-24 19:19:51

标签: python

我希望复制整个目录及其文件,同时打印要复制的每个文件名。

我正在使用cp -rf dir dest简单地调用os.system,但我无法单独打印每个文件名。

然后我考虑通过递归ls与os.system调用列出eash目录文件,保存整个字符串,将它们拆分到一个数组上,并实现一个for循环来运行os.system(“cp”file1 +“ des /“)并打印文件名,但看起来很多工作。

有什么更好的想法来实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

您可以使用os.walk获取整个目录列表,并使用该列表迭代复制所有文件。像

这样的东西
file_paths = [os.path.join(root, f) for root, _, files in os.walk('.') for f in files]
for path in file_paths:
    print path
    shutil.copy(path, target)

或者根据MatthewFranglen的评论,你可以shutil.copytree(src, dst)。这也会让你忽略一些事情,但是你需要定义一个函数来代替在列表理解中使用if。

# ignore all .DS_Store and *.txt files
file_paths = [os.path.join(root, f) for root, _, files in os.walk('.') for f in files if (f != '.DS_Store') or f.endswith('.txt'))]

相比
from shutil import copytree, ignore_patterns
ignore_func = ignore_patterns('.DS_Store', '*.txt')  # ignore .DS_Store and *.txt files
copytree('/path/to/dir/', '/other/dir', ignore=ignore_func)