Oparty na skrypcie Chrisa Downa, ten skrypt jest trochę bardziej „wizualny”. Nazywając ją z dwoma argumentami folder1
i folder2
to idzie pierwszy folder i dla każdego pliku wyszukuje odpowiedni plik w drugim folderze. Jeśli zostanie znaleziona, ścieżka względna zostanie wydrukowana na zielono, jeśli mają inny zmodyfikowany czas lub rozmiar, zostanie wydrukowana na żółto, a jeśli nie zostanie znaleziona, zostanie wydrukowana na czerwono.
#!/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])
Pamiętaj, że nie jest to wystarczające, aby zdecydować, czy dwa foldery są takie same, musisz to zrobić w obie strony, aby się upewnić. W praktyce, jeśli chcesz tylko wiedzieć, czy foldery są takie same , skrypt Chrisa jest lepszy. Jeśli chcesz wiedzieć, co brakuje lub różni się z jednego folderu do drugiego , mój skrypt Ci to powie.
UWAGA: trzeba będzie zainstalowany termcolor, pip install termcolor
.
source/
itarget/
są również bardzo ważne! (Bez nich