Column

Python
[Python]ファイルのコピーが全て正常に行えている事を再帰的に確認してみた
2023.04.13

こんにちは、齋藤です。
今回はフォルダ全てをコピーした際に正常にコピー出来ているかを再帰的に確認するPythonコードを紹介します。

dircmpオブジェクトには、比較したディレクトリの左側のみに存在するファイル:left_only、右側のみに存在するファイル:right_onlyのリストを表示します。

import filecmp

dir1 = "/path/to/first/directory"
dir2 = "/path/to/second/directory"

def compare_dirs(dir1, dir2, ignore=None):
    dirs_equal = filecmp.dircmp(dir1, dir2, ignore=ignore)
    
    left_only = dirs_equal.left_only
    right_only = dirs_equal.right_only
    diff_files = dirs_equal.diff_files
    funny_files = dirs_equal.funny_files
    
    for subdir in dirs_equal.common_dirs:
        subdir1 = f"{dir1}/{subdir}"
        subdir2 = f"{dir2}/{subdir}"
        
        sub_left_only, sub_right_only, sub_diff_files, sub_funny_files = compare_dirs(subdir1, subdir2, ignore)
        
        left_only += [f"{subdir}/{f}" for f in sub_left_only]
        right_only += [f"{subdir}/{f}" for f in sub_right_only]
        diff_files += [f"{subdir}/{f}" for f in sub_diff_files]
        funny_files += [f"{subdir}/{f}" for f in sub_funny_files]
        
    return left_only, right_only, diff_files, funny_files

left_only, right_only, diff_files, funny_files = compare_dirs(dir1, dir2, ignore=["$RECYCLE.BIN"])

print("Left only:")
print(left_only)
print("Right only:")
print(right_only)
print("Different files:")
print(diff_files)
print("Funny files:")
print(funny_files)