সমস্ত জবাব নিয়ে অসন্তুষ্ট, যেহেতু তাদের বেশিরভাগই খুব ধীরে ধীরে কাজ করে এবং বড় ডিরেক্টরিগুলির জন্য অহেতুক দীর্ঘ আউটপুট উত্পাদন করে, তাই আমি দুটি ফোল্ডারের তুলনা করার জন্য আমার নিজস্ব পাইথন স্ক্রিপ্ট লিখেছিলাম।
অন্যান্য অনেকগুলি সমাধানের বিপরীতে, এটি ফাইলগুলির বিষয়বস্তুর তুলনা করে না। এছাড়াও এটি অন্য ডিরেক্টরিতে অনুপস্থিত সাব-ডিরেক্টরিগুলির ভিতরে যায় না। সুতরাং আউটপুট বেশ সংক্ষিপ্ত এবং স্ক্রিপ্ট দ্রুত কাজ করে।
#!/usr/bin/env python3
import os, sys
def compare_dirs(d1: "old directory name", d2: "new directory name"):
def print_local(a, msg):
print('DIR ' if a[2] else 'FILE', a[1], msg)
# ensure validity
for d in [d1,d2]:
if not os.path.isdir(d):
raise ValueError("not a directory: " + d)
# get relative path
l1 = [(x,os.path.join(d1,x)) for x in os.listdir(d1)]
l2 = [(x,os.path.join(d2,x)) for x in os.listdir(d2)]
# determine type: directory or file?
l1 = sorted([(x,y,os.path.isdir(y)) for x,y in l1])
l2 = sorted([(x,y,os.path.isdir(y)) for x,y in l2])
i1 = i2 = 0
common_dirs = []
while i1<len(l1) and i2<len(l2):
if l1[i1][0] == l2[i2][0]: # same name
if l1[i1][2] == l2[i2][2]: # same type
if l1[i1][2]: # remember this folder for recursion
common_dirs.append((l1[i1][1], l2[i2][1]))
else:
print_local(l1[i1],'type changed')
i1 += 1
i2 += 1
elif l1[i1][0]<l2[i2][0]:
print_local(l1[i1],'removed')
i1 += 1
elif l1[i1][0]>l2[i2][0]:
print_local(l2[i2],'added')
i2 += 1
while i1<len(l1):
print_local(l1[i1],'removed')
i1 += 1
while i2<len(l2):
print_local(l2[i2],'added')
i2 += 1
# compare subfolders recursively
for sd1,sd2 in common_dirs:
compare_dirs(sd1, sd2)
if __name__=="__main__":
compare_dirs(sys.argv[1], sys.argv[2])
নমুনা ব্যবহার:
user@laptop:~$ python3 compare_dirs.py dir1/ dir2/
DIR dir1/out/flavor-domino removed
DIR dir2/out/flavor-maxim2 added
DIR dir1/target/vendor/flavor-domino removed
DIR dir2/target/vendor/flavor-maxim2 added
FILE dir1/tmp/.kconfig-flavor_domino removed
FILE dir2/tmp/.kconfig-flavor_maxim2 added
DIR dir2/tools/tools/LiveSuit_For_Linux64 added
অথবা আপনি যদি প্রথম ডিরেক্টরি থেকে কেবল ফাইলগুলি দেখতে চান:
user@laptop:~$ python3 compare_dirs.py dir2/ dir1/ | grep dir1
DIR dir1/out/flavor-domino added
DIR dir1/target/vendor/flavor-domino added
FILE dir1/tmp/.kconfig-flavor_domino added
PS যদি আপনার সম্ভাব্য পরিবর্তনের জন্য ফাইলের আকার এবং ফাইল হ্যাশগুলির তুলনা করতে হয় তবে আমি এখানে একটি আপডেট স্ক্রিপ্ট প্রকাশ করেছি: https://gist.github.com/amakukha/f489cbde2afd32817f8e866cf4abe779
grep
চাই^dir1
যেdir1
এই পথে আমি আর হাজির হব না ।