Skip to content

Instantly share code, notes, and snippets.

@masala-man
Last active July 30, 2021 14:09
Show Gist options
  • Save masala-man/2cb174dae28372f6c27c0b2f22653311 to your computer and use it in GitHub Desktop.
Save masala-man/2cb174dae28372f6c27c0b2f22653311 to your computer and use it in GitHub Desktop.
Recursively compare directory structures
def are_dir_trees_equal(dir1, dir2):
"""
Compare two directories recursively. Files in each directory are
assumed to be equal if their names and contents are equal.
@param dir1: First directory path
@param dir2: Second directory path
@return: True if the directory trees are the same and
there were no errors while accessing the directories or files,
False otherwise.
"""
dirs_cmp = filecmp.dircmp(dir1, dir2)
if len(dirs_cmp.left_only)>0 or len(dirs_cmp.right_only)>0 or \
len(dirs_cmp.funny_files)>0:
return False
(_, mismatch, errors) = filecmp.cmpfiles(
dir1, dir2, dirs_cmp.common_files, shallow=False)
if len(mismatch)>0 or len(errors)>0:
return False
for common_dir in dirs_cmp.common_dirs:
new_dir1 = os.path.join(dir1, common_dir)
new_dir2 = os.path.join(dir2, common_dir)
if not are_dir_trees_equal(new_dir1, new_dir2):
return False
return True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment