Last active
July 30, 2021 14:09
-
-
Save masala-man/2cb174dae28372f6c27c0b2f22653311 to your computer and use it in GitHub Desktop.
Recursively compare directory structures
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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