Basato sulla sceneggiatura di Chris Down, questa sceneggiatura è un po 'più "visiva". Chiamandolo con due argomenti folder1
e folder2
, cammina la prima cartella e per ogni file cerca un file corrispondente nella seconda cartella. Se viene trovato, il relativo percorso viene stampato in verde, se hanno tempi o dimensioni modificati diversi, viene stampato in giallo e, se non viene trovato, viene stampato in rosso.
#!/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])
Si noti che questo non è sufficiente per decidere se le due cartelle sono uguali, è necessario eseguirlo in entrambi i modi per assicurarsi. In pratica, se vuoi solo sapere se le cartelle sono uguali , allora lo script di Chris è migliore. Se vuoi sapere cosa manca o è diverso da una cartella all'altra , allora il mio script ti dirà.
NOTA: è necessario termcolor installato, pip install termcolor
.
source/
etarget/
sono anche molto importanti! (Senza di essi, confronterai i nomi delle directory di origine e di destinazione con i nomi dei file