cp -r
特定のディレクトリを特別な方法で処理するバージョンのPythonを実装したいと思います。そうした場合、特定のファイル名を除いて、そのすべてのファイル/サブディレクトリを正確ににコピーしmycp.py -r indir outdir
たいと思います。Pythonでこれを行うための最も移植性の高い方法は何ですか?indir
outdir
例:私はこのディレクトリ構造を持っています:
dir1/
file1
dir2/
dir3/
specialdir/
myfile.bar
file1
はファイルであり、はファイルspecialdir
を含むディレクトリですmyfile.bar
。dir1
とそのすべての内容をコピーしたいのですが*.bar
、ファイルを含む特別なディレクトリを処理します。この場合specialdir
、基準を満たすだけです。mycopy
すべてをコピーしたいのですdir1
が、特別なディレクトリをzip形式で置き換えます。上記の例では、そのままコピーすることを意味しdir1
ますが、それに置き換えるspecialdir
とspecialdir.zip
、の処理済みバージョンが含まれる可能性がありますmyfile.bar
。
以下の提案に従おうとしましたが、コピーの処理方法がわかりません。
import os
import shutil
SPECIAL_DIRS = []
def is_special_dir(path, dirnames):
"""directories are special if they have .bar files"""
special_dirs = []
for d in dirnames:
d = os.path.join(path, d)
if os.path.isdir(d):
files_in_d = os.listdir(d)
for f in files_in_d:
if f.endswith(".bar"):
# directory is special if it contains
# .bar files
special_dirs.append(d)
SPECIAL_DIRS.extend(special_dirs)
return special_dirs
def my_copy(indir, outdir):
shutil.copytree(indir, outdir, ignore=is_special_dir)
print "Found special dirs: ", SPECIAL_DIRS
# make a copy of dir1 but handle special directories
# differently
my_copy("dir1", "copy_dir1")
試してみると、特別なディレクトリが正しく検出されます。
$ copy_test.py
Found special dirs: ['dir1/dir2/specialdir']
specialdir
どうすればそれを正しい対応する場所に挿入させることができcopy_dir1
ますか?(宛先ディレクトリ)は、ファイルを含むディレクトリの特別な処理を除いて、(ソースディレクトリ)copy_dir1
とまったく同じ構造にする必要があります。dir1
.bar