Basierend auf Chris Downs Drehbuch ist dieses Drehbuch etwas "visueller". Wenn Sie es mit zwei Argumenten folder1
und folder2
aufrufen, durchsucht es den ersten Ordner und durchsucht für jede Datei eine entsprechende Datei im zweiten Ordner. Wenn es gefunden wird, wird der relative Pfad in Grün gedruckt, wenn sie eine andere Änderungszeit oder -größe haben, wird es in Gelb gedruckt, und wenn es nicht gefunden wird, wird es in Rot gedruckt.
#!/usr/bin/env python
import os
import sys
from termcolor import colored
def compare_filestats(file1,file2):
"""
Compares modified time and size between two files.
Return:
-1 if file1 or file2 does not exist
0 if they exist and compare equal
1 if they have different modified time, but same size
2 if they have different size, but same modified time
3 if they have different size, and different modified time
"""
if not os.path.exists(file1) or not os.path.exists(file2):
return -1
stat1 = os.stat(file1)
stat2 = os.stat(file2)
return (stat1.st_mtime != stat2.st_mtime) \
+ 2*(stat1.st_size != stat2.st_size)
def compare_folders(folder1,folder2):
"""
folder1: serves as reference and will be walked through
folder2: serves as target and will be querried for each file in folder1
Prints colored status for each file in folder1:
missing: file was not found in folder2
mtime : modified time is different
size : filesize is different
ok : found with same filestats
"""
for dirpath, dirnames, filenames in os.walk(folder1):
for file1 in ( os.path.join(dirpath, x) for x in filenames ):
relpath = file1[len(folder1):]
file2 = os.path.join( folder2, relpath )
comp = compare_filestats(file1,file2)
if comp < 0:
status = colored('[missing]','red')
elif comp == 1:
status = colored('[mtime ]','yellow')
elif comp >= 2:
status = colored('[size ]','yellow')
else:
status = colored('[ok ]','green')
print status, relpath
if __name__ == '__main__':
compare_folders(sys.argv[1],sys.argv[2])
Beachten Sie, dass dies nicht ausreicht, um zu entscheiden, ob die beiden Ordner identisch sind. Sie müssen es in beide Richtungen ausführen, um sicherzustellen, dass die beiden Ordner identisch sind. In der Praxis ist Chris 'Skript besser, wenn Sie nur wissen möchten, ob die Ordner identisch sind. Wenn Sie wissen möchten, was in einem Ordner fehlt oder was sich von einem Ordner zum anderen unterscheidet , werden Sie von meinem Skript darüber informiert .
HINWEIS: Sie müssen termcolor installiert haben pip install termcolor
.
source/
undtarget/
sind auch beide sehr wichtig! (Ohne sie werden Quell- und Zielverzeichnisnamen zusammen mit den