Berdasarkan skrip Chris Down, skrip ini sedikit lebih "visual". Menyebutnya dengan dua argumen folder1
dan folder2
, berjalan di folder pertama dan untuk setiap file mencari file yang sesuai di folder kedua. Jika ditemukan, jalur relatif dicetak dalam warna hijau, jika mereka memiliki waktu atau ukuran yang dimodifikasi berbeda, itu dicetak dalam warna kuning, dan jika tidak ditemukan maka dicetak dalam warna merah.
#!/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])
Perhatikan bahwa ini tidak cukup untuk memutuskan apakah kedua folder itu sama, Anda harus menjalankan keduanya untuk memastikan. Dalam praktiknya jika Anda hanya ingin tahu apakah foldernya sama , maka skrip Chris lebih baik. Jika Anda ingin tahu apa yang hilang atau berbeda dari satu folder ke folder lainnya , maka skrip saya akan memberi tahu Anda.
CATATAN: Anda perlu menginstal termcolor pip install termcolor
,.
source/
dantarget/
keduanya sangat penting! (Tanpa mereka, Anda akan membandingkan nama direktori sumber dan target bersama dengan nama file anak, sehingga semua nama file akan berbeda.)