एक ही सामग्री के साथ एक निर्देशिका में सभी फ़ोल्डरों का पता लगाएं


10

उबंटू में, क्या किसी निर्देशिका में डुप्लिकेट फ़ोल्डर खोजने के लिए कोई है (यानी, समान सामग्री वाले फ़ोल्डर)? मुझे लगता है कि डुप्लिकेट फ़ाइलों (जैसे fdupes) को खोजने के लिए पहले से ही कुछ कमांड-लाइन टूल उपलब्ध हैं, लेकिन मैं इसके बजाय डुप्लिकेट फ़ोल्डर ढूंढना चाहता हूं। यही है, उन फ़ोल्डरों को ढूंढें जो उन फ़ाइलों की सामग्री के संदर्भ में मेल खाते हैं, जिनमें (हालांकि फ़ाइल नाम और अन्य मेटाडेटा भिन्न हो सकते हैं)।


मैं एक निर्देशिका में सभी फ़ोल्डरों की एक सूची (लंबाई द्वारा क्रमबद्ध) उत्पन्न करके शुरू कर सकता हूं, और फिर समान लंबाई वाले प्रत्येक जोड़ी फ़ोल्डर की जांच कर सकता हूं।
एंडरसन ग्रीन

"डुप्लिकेट" को परिभाषित करें। क्या फाइल के अंदर फाइल केवल सामग्री होनी चाहिए? फ़ाइल का नाम? आईनोड नंबर? फाइल का आकार?
क्रिस डाउन

@ChrisDown प्रश्न को अपडेट कर दिया गया है।
एंडरसन ग्रीन

3
हाँ। निर्देशिकाएँ वास्तव में सिर्फ फाइलें हैं, इसलिए आपका कथन अस्पष्ट है। वास्तविकता में "समान सामग्री" रखने का मतलब यह होगा कि दोनों निर्देशिकाओं में समान आयोड संदर्भ होते हैं। यह स्पष्ट नहीं है कि आपका क्या मतलब है, या क्या आपका मतलब है कि अंदर की फ़ाइलों में समान सामग्री होनी चाहिए, और यदि ऐसा है, तो क्या अन्य वजीफा (माइम, फ़ाइलनाम, आदि) हैं।
क्रिस डाउन

3
@ क्रिसडाउन का मतलब है कि अंदर की फाइलों में समान सामग्री होनी चाहिए।
एंडरसन ग्रीन

जवाबों:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

आप इसे यहां कार्रवाई में देख सकते हैं:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

चूंकि यह स्क्रिप्ट अप्रयुक्त है, इसलिए मैं यह देखने के लिए उत्सुक हूं कि क्या यह उस तरह से काम करता है जैसे यह काम करना चाहिए।
एंडरसन ग्रीन

1
@AndersonGreen अद्यतन किए गए उत्तर की जाँच करें, इसका परीक्षण किया।
क्रिस डाउन

अच्छा! वहाँ भी साथ एक परीक्षण किया जाना चाहिए cat > 1/2 <<< barऔर cat > 2/3 <<< bar एक से अधिक फ़ाइलों और भिन्न मेटाडाटा (== "वही") को दिखाने के लिए
nealmcb

@ क्रिसडाउन: क्या अंतिम चरण में छंटनी की जरूरत है?
harish.venkat

सुरुचिपूर्ण स्क्रिप्ट, केवल मामूली बग यह है कि यह उसी समय वापस आती है जब या तो दोनों निर्देशिकाएं मौजूद नहीं होती हैं। आसानी से ठीक किया जा सकता है अगर कोई आई
cosine
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.