क्या मेरी डिस्क पर डुप्लिकेट फ़ाइलों को ढूंढना संभव है जो थोड़ा समान हैं लेकिन अलग-अलग फ़ाइल-नाम हैं?
st_size
, केवल उसी में से एक को समाप्त कर सकते हैं, और फिर केवल मिलान के लिए md5sums की गणना कर सकते हैं st_size
।
क्या मेरी डिस्क पर डुप्लिकेट फ़ाइलों को ढूंढना संभव है जो थोड़ा समान हैं लेकिन अलग-अलग फ़ाइल-नाम हैं?
st_size
, केवल उसी में से एक को समाप्त कर सकते हैं, और फिर केवल मिलान के लिए md5sums की गणना कर सकते हैं st_size
।
जवाबों:
fdupes
यह कर सकता है। से man fdupes
:
डुप्लिकेट फ़ाइलों के लिए दिए गए पथ को खोजता है। इस तरह की फाइलें फ़ाइल के आकार और एमडी 5 हस्ताक्षरों की तुलना करके पाई जाती हैं, इसके बाद बाइट की तुलना की जाती है।
डेबियन या उबंटू में, आप इसे स्थापित कर सकते हैं apt-get install fdupes
। फेडोरा / रेड हैट / सेंटोस में, आप इसे स्थापित कर सकते हैं yum install fdupes
। आर्क लिनक्स पर आप pacman -S fdupes
और जेंटू पर, का उपयोग कर सकते हैं emerge fdupes
।
अपने फाइलसिस्टम रूट से उतरने वाले चेक को चलाने के लिए, जो संभवतः समय और मेमोरी का एक महत्वपूर्ण हिस्सा लेगा, जैसे कुछ का उपयोग करें fdupes -r /
।
जैसा कि टिप्पणियों में पूछा गया है, आप निम्नलिखित करके सबसे बड़ा डुप्लिकेट प्राप्त कर सकते हैं:
fdupes -r . | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n
यह तब टूटेगा जब आपके फाइलनाम में नई सुर्खियाँ होंगी।
fdupes ....... | xargs ls -alhd | egrep 'M |G '
मानव पठनीय प्रारूप में फ़ाइलों को रखने के लिए और केवल मेगाबाइट या गीगाबाइट में आकार वाले। वास्तविक आउटपुट के अनुरूप कमांड बदलें।
du
लिए पाइप किया sort
जाएगा।
एक और अच्छा उपकरण है fslint
:
fslint फाइलसिस्टम के साथ विभिन्न समस्याओं को खोजने के लिए एक टूलसेट है, जिसमें डुप्लिकेट फाइलें और समस्याग्रस्त फाइलनेम आदि शामिल हैं।
जीयूआई के अलावा और उन्हें एक्सेस करने के लिए अलग-अलग कमांड लाइन टूल उपलब्ध हैं, जो एक मानक इंस्टॉल पर $ PATH / usr / share / fslint / fslint डायरेक्टरी में बदल सकते हैं, या जोड़ सकते हैं। उस निर्देशिका में इनमें से प्रत्येक कमांड में एक --help विकल्प है, जो इसके मापदंडों का विवरण देता है।
findup - find DUPlicate files
डेबियन आधारित प्रणालियों पर, आप इसे स्थापित कर सकते हैं:
sudo apt-get install fslint
यदि आप तृतीय पक्ष उपकरण स्थापित नहीं करना चाहते हैं या नहीं कर सकते हैं, तो आप इसे मैन्युअल रूप से भी कर सकते हैं। जिस तरह से इस तरह के अधिकांश कार्यक्रम काम करते हैं, वह फ़ाइल चेकसम की गणना के द्वारा होता है । एक ही md5sum के साथ फाइलें लगभग निश्चित रूप से एक ही डेटा शामिल हैं। तो, आप ऐसा कुछ कर सकते हैं:
find / -type f -exec md5sum {} \; > md5sums
gawk '{print $1}' md5sums | sort | uniq -d > dupes
while read d; do echo "---"; grep $d md5sums | cut -d ' ' -f 2-; done < dupes
नमूना आउटपुट (इस उदाहरण में फ़ाइल नाम समान हैं, लेकिन जब वे भिन्न होंगे तो यह भी काम करेगा):
$ while read d; do echo "---"; grep $d md5sums | cut -d ' ' -f 2-; done < dupes
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/if_bonding.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/if_bonding.h
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/route.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/route.h
---
/usr/src/linux-headers-3.2.0-3-common/include/drm/Kbuild
/usr/src/linux-headers-3.2.0-4-common/include/drm/Kbuild
---
यह पहले से उल्लिखित समर्पित उपकरणों की तुलना में बहुत धीमा होगा , लेकिन यह काम करेगा।
st_size
, उसी आकार की किसी फ़ाइल को खोजने के लिए बहुत तेज़ हो , और उसके बाद केवल फाइलों के बीच md5sums की गणना करना st_size
।
संक्षिप्त उत्तर: हाँ।
लंबा संस्करण: विकिपीडिया fdupes प्रविष्टि पर एक नज़र है , यह तैयार किए गए समाधानों की काफी अच्छी सूची को स्पोर्ट करता है। बेशक आप अपने खुद के लिख सकते हैं, ऐसा नहीं है कि मुश्किल - तरह हैशिंग कार्यक्रमों diff
, sha*sum
, find
, sort
और uniq
काम करना चाहिए। आप इसे एक पंक्ति में भी रख सकते हैं, और यह अभी भी समझ में आएगा।
यदि आपको लगता है कि हैश फ़ंक्शन (यहाँ MD5) आपके डोमेन पर टकराव मुक्त है:
find $target -type f -exec md5sum '{}' + | sort | uniq --all-repeated --check-chars=32 \
| cut --characters=35-
समान फ़ाइल नाम समूहीकृत करना चाहते हैं? not_uniq.sh
आउटपुट स्वरूपित करने के लिए एक सरल स्क्रिप्ट लिखें :
#!/bin/bash
last_checksum=0
while read line; do
checksum=${line:0:32}
filename=${line:34}
if [ $checksum == $last_checksum ]; then
if [ ${last_filename:-0} != '0' ]; then
echo $last_filename
unset last_filename
fi
echo $filename
else
if [ ${last_filename:-0} == '0' ]; then
echo "======="
fi
last_filename=$filename
fi
last_checksum=$checksum
done
फिर find
अपनी स्क्रिप्ट का उपयोग करने के लिए कमांड बदलें :
chmod +x not_uniq.sh
find $target -type f -exec md5sum '{}' + | sort | not_uniq.sh
यह मूल विचार है। find
यदि आपकी फ़ाइल में कुछ वर्णों के नाम हैं, तो संभवतः आपको बदलना चाहिए । (उदाहरण के लिए स्थान)
मैंने fdupes , jdupes के हाल ही में बढ़े हुए कांटे को जोड़ने का सोचा , जो कि fdupes की तुलना में अधिक तेज़ और अधिक समृद्ध होने का वादा करता है (जैसे आकार फ़िल्टर):
jdupes . -rS -X size-:50m > myjdups.txt
यह वर्तमान निर्देशिका में 50MB से बड़ी डुप्लिकेट फ़ाइलों को पुन: खोज लेगा और परिणामी सूची को myjdups.txt में आउटपुट कर देगा।
ध्यान दें, आउटपुट आकार द्वारा सॉर्ट नहीं किया गया है और चूंकि यह निर्माण में नहीं दिखता है, इसलिए मैंने इसे प्राप्त करने के लिए @Chris_Down उत्तर को अनुकूलित किया है:
jdupes -r . -X size-:50m | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n > myjdups_sorted.txt
इस कार्य के लिए उपलब्ध ओपन सोर्स सॉफ्टवेयर की सूची के साथ विकिपीडिया का एक लेख ( http://en.wikipedia.org/wiki/List_of_duplicate_file_finders ) था , लेकिन अब इसे हटा दिया गया है ।
मैं जोड़ना चाहूंगा कि fslint का GUI संस्करण बहुत ही रोचक है, जिससे मास्क का उपयोग करने की अनुमति मिलती है कि कौन सी फ़ाइलों को हटाना है। डुप्लिकेट तस्वीरों को साफ करने के लिए बहुत उपयोगी है।
लिनक्स पर आप उपयोग कर सकते हैं:
- FSLint: http://www.pixelbeat.org/fslint/
- FDupes: https://en.wikipedia.org/wiki/Fdupes
- DupeGuru: https://www.hardcoded.net/dupeguru/
2 कई सिस्टम पर अंतिम काम (विंडोज़, मैक और लिनक्स) मैं FSLint के लिए जाँच नहीं की है
यहाँ मेरा उस पर है:
find -type f -size +3M -print0 | while IFS= read -r -d '' i; do
echo -n '.'
if grep -q "$i" md5-partial.txt; then echo -e "\n$i ---- Already counted, skipping."; continue; fi
MD5=`dd bs=1M count=1 if="$i" status=noxfer | md5sum`
MD5=`echo $MD5 | cut -d' ' -f1`
if grep "$MD5" md5-partial.txt; then echo "\n$i ---- Possible duplicate"; fi
echo $MD5 $i >> md5-partial.txt
done
यह अलग है कि यह केवल फ़ाइल के पहले 1 एमबी तक हैश करता है।
इसकी कुछ समस्याएं / विशेषताएं हैं:
मैं इसका उपयोग वीडियो क्लिप की तुलना करने के लिए करता हूं इसलिए यह मेरे लिए पर्याप्त है।