を使用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)
別の方法として、's のコメントに従って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)