क्रिस डाउन की स्क्रिप्ट के आधार पर, यह स्क्रिप्ट थोड़ी अधिक "दृश्य" है। इसे दो तर्कों के साथ folder1
और folder2
, यह पहला फ़ोल्डर चलता है और प्रत्येक फ़ाइल के लिए दूसरे फ़ोल्डर में एक संबंधित फ़ाइल खोजता है। यदि यह पाया जाता है, तो सापेक्ष पथ हरे रंग में मुद्रित होता है, यदि उनके पास अलग-अलग संशोधित समय या आकार होता है, तो यह पीले रंग में मुद्रित होता है, और यदि यह नहीं पाया जाता है, तो यह लाल रंग में मुद्रित होता है।
#!/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])
ध्यान दें कि यह तय करने के लिए पर्याप्त नहीं है कि दोनों फ़ोल्डर समान हैं, आपको यह सुनिश्चित करने के लिए दोनों तरीकों से चलाने की आवश्यकता होगी। व्यवहार में यदि आप यह जानना चाहते हैं कि क्या फ़ोल्डर्स समान हैं , तो क्रिस की स्क्रिप्ट बेहतर है। यदि आप जानना चाहते हैं कि क्या गायब है या एक फ़ोल्डर से दूसरे में अलग है , तो मेरी स्क्रिप्ट आपको बताएगी।
नोट: यदि आप, स्थापित termcolor की आवश्यकता होगी pip install termcolor
।
source/
औरtarget/
दोनों भी बहुत महत्वपूर्ण हैं! (उनके बिना, आप स्रोत और लक्ष्य निर्देशिका नामों की तुलना बाल फ़ाइल नामों के साथ करेंगे, इसलिए सभी फ़ाइल नाम अलग-अलग होंगे।)