क्या हार्डलिंक के साथ डुप्लिकेट फ़ाइलों को बदलने का एक आसान तरीका है?


136

मैं findदो निर्देशिकाओं में डुप्लिकेट फ़ाइलों को खोजने के लिए एक आसान तरीका (एक कमांड या कमांड की श्रृंखला, संभवतः शामिल है ) की तलाश कर रहा हूं , और एक निर्देशिका में फ़ाइलों को दूसरे निर्देशिका में फ़ाइलों के हार्डलिंक के साथ बदल रहा हूं ।

यहां स्थिति है: यह एक फ़ाइल सर्वर है, जिस पर कई लोग ऑडियो फाइलों को संग्रहीत करते हैं, प्रत्येक उपयोगकर्ता का अपना फ़ोल्डर होता है। कभी-कभी कई लोगों के पास एक ही ऑडियो फ़ाइलों की प्रतियां होती हैं। अभी, ये डुप्लिकेट हैं। मैं इसे बनाना चाहूंगा ताकि हार्ड ड्राइव स्पेस को बचाने के लिए वे हार्डलिंक हों।


20
एक समस्या जिसे आप हार्डलिंक के साथ चला सकते हैं, यदि कोई व्यक्ति अपनी संगीत फ़ाइलों में से किसी एक के लिए कुछ करने का फैसला करता है जिसे आपने हार्ड-लिंक किया है तो वे अनजाने में अपने संगीत के अन्य लोगों की पहुंच को प्रभावित कर सकते हैं।
स्टीवन डी

4
एक और समस्या यह है कि "कुछ वास्तव में महान ट्यून" वाली दो अलग-अलग फाइलें, भले ही एक ही एनकोडर के साथ एक ही स्रोत से ली गई हों, संभावना है कि यह बिट-फॉर-बिट समान नहीं होगी।
msw

3
एक सार्वजनिक संगीत फ़ोल्डर के लिए बेहतर सॉलेन्स हो सकता है ...
स्टीफन


1
@tante: सिमलिंक का उपयोग करने से कोई समस्या नहीं होती है। जब कोई उपयोगकर्ता किसी फाइल को "डिलीट" करता है, तो उसके लिंक की संख्या घट जाती है, जब गिनती शून्य तक पहुंच जाती है, तो फाइलें वास्तव में डिलीट हो जाती हैं, बस। इसलिए हटाने में हार्डलिंक फ़ाइलों की कोई समस्या नहीं है, एकमात्र समस्या उपयोगकर्ता को फ़ाइल को संपादित करने (वास्तव में असुरक्षित) या इसे अधिलेखित करने की कोशिश करना है (यदि संभव हो तो लॉग इन करें)।
मारार्टिनस

जवाबों:


41

Http://cpansearch.perl.org/src/ANDK/Perl-Repository-APC-2.002/eg/trimtrees.pl पर एक पर्ल स्क्रिप्ट है, जो वास्तव में आप चाहते हैं:

कमांड लाइन पर नामित सभी निर्देशिकाओं को पार करें, एमडी 5 चेकसमों की गणना करें और समान एमडी 5 के साथ फाइलें ढूंढें। यदि वे समान हैं, तो एक वास्तविक तुलना करें यदि वे वास्तव में समान हैं, तो पहले एक के लिए एक कड़ी के साथ दो फाइलों के दूसरे को बदलें।


एकदम सही लगता है , धन्यवाद !! मैं इसे आज़माऊंगा और अगर यह वर्णित है तो स्वीकार करता है!
जोश

3
यह वही है जो मैंने पूछा था। हालांकि मेरा मानना ​​है कि डेडअप के साथ ZFS अंततः करने का तरीका होगा, क्योंकि मैंने पाया कि फाइलों में थोड़ा अंतर था इसलिए केवल कुछ को ही हार्डलिंक किया जा सकता था।
जोश

11
इसको अपडाउन किया, लेकिन कुछ और शोध करने के बाद, मैं उस तरह का था जो मैंने नहीं किया। rdfindसभी प्रमुख प्लेटफार्मों (ओएस एक्स, लिनक्स, (साइबर) जीत, सोलारिस) के लिए पैकेज प्रबंधकों के माध्यम से उपलब्ध है, और एक धमाकेदार देशी गति पर काम करता है। तो नीचे दिए गए जवाब की जाँच करें।
oligofren

@oligofren मैं भी यही सोच रहा था, लेकिन फिर मैंने मारा [Errno 31] Too many links। यह स्क्रैप केवल वही चीज़ लगती है जो इसे संभालती है।
फुनेहे

5
हर एक फ़ाइल की जाँच करना, केवल फाइलों के बजाय जहाँ समान आकार के साथ कम से कम एक दूसरे के पास मौजूद है, अनावश्यक रूप से अक्षम है (और अनावश्यक रूप से हैश टकराव की संभावना है)।
चार्ल्स डफी

85

rdfindठीक वही करता है जो आप पूछते हैं (और क्रम जॉनी में सूचीबद्ध क्यों है)। डुप्लिकेट को हटाना संभव बनाता है, उन्हें नरम या कठोर लिंक से बदल दें। symlinksआपके साथ संयुक्त सिम्लिंक को पूर्ण या सापेक्ष भी बना सकता है। आप चेकसम एल्गोरिथ्म (md5 या sha1) भी चुन सकते हैं।

चूंकि इसे संकलित किया गया है, यह अधिकांश स्क्रिप्टेड समाधानों की तुलना में तेज़ है: time2009 के मेरे मैक मिनी पर 2600 फाइलों के साथ 15 GiB फ़ोल्डर पर यह रिटर्न

9.99s user 3.61s system 66% cpu 20.543 total

(md5 का उपयोग करके)।

अधिकांश पैकेज हैंडलर (उदाहरण के लिए Mac OS X के लिए MacPorts) में उपलब्ध है।


11
+1 मैंने rdfindइसे इस्तेमाल किया और प्यार किया। यह एक -dryrun trueविकल्प है जो आपको बताएगा कि उसने क्या किया होगा। हार्ड लिंक के साथ डुप्लिकेट को बदलना उतना ही सरल है जितना कि -makehardlinks true। इसने एक अच्छा लॉग तैयार किया और इससे मुझे पता चल गया कि कितनी जगह खाली हुई। इसके अलावा, लेखक के बेंचमार्क के अनुसार , rdfind डफ और fslint से तेज है।
डैनियल ट्रेबिएन

ऊह, अच्छा। मैं fdupes का उपयोग करता था, लेकिन हार्डलिंक डूप के लिए इसका -L विकल्प नवीनतम Ubuntu 14.10 में गायब है। काफी धीमा था, और OSX पर Homebrew के लिए मौजूद नहीं था, इसलिए यह जवाब बेहतर है। धन्यवाद!
oligofren

बहुत स्मार्ट और तेज़ एल्गोरिथम।
ndemou

2
मुझे संदेह है कि इस उपकरण के प्रदर्शन का एल्गोरिथ्म के साथ ही अधिक है और यह संकलित उपकरण या स्क्रिप्ट के साथ करने के लिए कम है। इस तरह के ऑपरेशन के लिए, डिस्क लगभग हर समय अड़चन बनने वाली है। जब तक स्क्रिप्टेड टूल यह सुनिश्चित कर लेते हैं कि चेकसमों पर सीपीयू को जलाने के दौरान उनके पास एक एसिंक्स आई / ओ ऑपरेशन है, तब तक उन्हें एक देशी बाइनरी के रूप में प्रदर्शन करना चाहिए।
cdhowie

rdfind नए OS और कंपाइलर पर बहुत निर्भर है। (विकास उपकरण के पूर्ण पुनर्निर्माण के बिना CentOS 6.x पर नहीं चलेगा)
कॉस्मो एफ

49

fdupesउपकरण का उपयोग करें :

fdupes -r /path/to/folderआपको निर्देशिका में डुप्लिकेट की सूची देता है (-r इसे पुनरावर्ती बनाता है)। आउटपुट इस तरह दिखता है:


filename1
filename2

filename3
filename4
फाइलन 5


filename1 और filename2 समान होने के साथ filename3, filename4 और filename5 भी समान हैं।


1
उबंटू नोट: सितंबर 2013 तक, इसकी स्थिर रिलीज़ नहीं हुई (यह 1.50-PR2-3 पर है), इसलिए अपडेट ubuntu में अभी तक दिखाई नहीं देता है।
स्टुअर्ट एक्सॉन

11
मैंने सिर्फ Ubuntu और Debian दोनों पर fdupes_1.50-PR2-4 स्थापित करने की कोशिश की, न ही -L झंडा है। सौभाग्य से github.com/tobiasschulz/fdupes से निर्माण सुपर आसान था।
1524 पर neu242

3
कोशिश करो rdfind- पसंद है fdupes, लेकिन तेजी से और ओएस एक्स और साइगविन पर भी उपलब्ध है।
oligofren

6
fdupesकेवल डुप्लिकेट खोजने के लिए लगता है, उन्हें हार्डलिंक के साथ प्रतिस्थापित न करें, इसलिए प्रश्न IMO का उत्तर नहीं।
15

2
इसी तरह का एक टूल है, जिसे इसके jdupesआधार पर रखा जाता है fdupes, लेकिन यह डुप्लिकेट फ़ाइलों को सिम्बलिंक ( -l), हार्डलिंक ( -L) के साथ बदल सकता है या फिर btrfs को फाइल सिस्टम लेवल पर ब्लॉक को कम करने के निर्देश देता है ( -Bयदि आप btrfs का उपयोग कर रहे हैं)।
मारियस गेदमिनस

23

मैं http://jak-linux.org/projects/hardlink/hardlink से उपयोग करता हूं


1
अच्छा संकेत, मैं एक नियमित आधार code.google.com/p/hardlinkpy पर उपयोग कर रहा हूं लेकिन यह कुछ समय के लिए अपडेट नहीं किया गया था ...
meduz

2
यह hardlinkफेडोरा / आरएचईएल / आदि पर मूल के समान प्रतीत होता है ।

1
hardlinkअब कई लिनक्स पैकेज सिस्टम (~ 2014 के बाद से) में एक देशी बाइनरी है और बहुत तेज है। 1,2M फ़ाइलों (320GB) के लिए, यह सिर्फ 200 सेकंड (लगभग 10% फ़ाइलों को जोड़ता है) ले गया।
मार्सेल वाल्डवोगेल

hardlinkएफडब्ल्यूआईडब्ल्यू , उपरोक्त जूलियन एंड्रेस क्लोड द्वारा बनाया गया था , जबकि फेडोरा hardlinkको जैकब जेलाइनक (स्रोत: pagure.io/hardlink - फेडोरा पैकेज नाम:
हार्डलिंक

18

यह "fslint" द्वारा प्रदान किए गए कार्यों में से एक है - http://en.flossmanuals.net/FSlint/Introduction

"मर्ज" बटन पर क्लिक करें:

स्क्रीनशॉट


4
-एम हार्डलिंक को एक साथ डुप्लिकेट करेगा, -d सभी को हटा देगा, लेकिन -t सूख जाएगा, यह क्या करेगा मुद्रण
Azendale

1
उबंटू पर यहाँ क्या करना है: sudo apt-get install fslint /usr/share/fslint/fslint/findup -m /your/directory/tree(निर्देशिका / usr / share / fslint / fslint / डिफ़ॉल्ट रूप से $ PATH में नहीं है)
Jocelyn

14

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

ZFS के पास पूल संस्करण 23 और कम्प्रेशन के बाद से लंबे समय पहले से डिडअप (ब्लॉक-लेवल, फाइल-लेवल नहीं) है। यदि आप linux का उपयोग कर रहे हैं, तो आप zfs-fuse की कोशिश कर सकते हैं , या यदि आप BSD का उपयोग करते हैं, तो यह मूल रूप से समर्थित है।


यह संभवतः वह तरीका है जो मैं अंततः जाऊंगा, हालांकि, क्या बीएसडी का जेडएफएस कार्यान्वयन कटौती करता है? मुझे लगा कि यह नहीं किया।
जोश

इसके अलावा, ड्रैगनफ़्लाईबीएसडी पर हैमर फाइल सिस्टम में डिडुप्लीकेशन सपोर्ट है।
हाहामु

14
ZFS dedup किसी का मित्र नहीं है। यदि ZFS 1Tb RAM प्रति 1 usb डिस्क स्थान की सिफारिश करता है, तो आप friggin 'पागल हैं यदि आप 32 GB RAM से कम 1Tb उपयोग करने योग्य डिस्क स्थान के साथ डिडअप का उपयोग करने का प्रयास करते हैं। इसका मतलब है कि 1 टीबी दर्पण के लिए, यदि आपके पास 32 जीबी रैम नहीं है, तो आपको मेमोरी बम की स्थिति के जल्द या बाद में सामना करने की संभावना है जो कि राम की कमी के कारण मशीन को रोक देगा। वहाँ किया गया है, जो अभी भी PTSD से उबर रहा है।
हत्यारोपी

4
ऑनलाइन डिडुप्लीकेशन (यानी, हर लिखने पर जांच) के साथ जरूरत से ज्यादा रैम आवश्यकताओं बचने के लिए, btrfsका उपयोग करता है बैच या ऑफ़लाइन डिडुप्लीकेशन (इसे चलाने के लिए जब भी आप इसे उपयोगी / आवश्यक विचार करें) btrfs.wiki.kernel.org/index.php/Deduplication
मार्सेल Waldvogel

3
सात साल बाद अपडेट करें: मैंने अंततः जेडएफएस में कदम रखा और समर्पण की कोशिश की - मैंने पाया कि यह रैम की आवश्यकताएं वास्तव में सिर्फ उच्च तक थीं। जेडएफएस स्नैपशॉट के चालाक उपयोग ने उस समाधान को प्रदान किया जिसका उपयोग करके मैंने समाप्त किया। (एक उपयोगकर्ता के संगीत, स्नैपशॉट और क्लोन को कॉपी करें, क्लोन में दूसरे उपयोगकर्ता के संगीत की नकल करें rsync --inplaceताकि केवल बदले हुए ब्लॉक संग्रहीत हों)
जोश

7

इन दिनों आधुनिक लिनक्स पर https://github.com/g2p/bedup है जो एक btrfs फाइल सिस्टम पर डी-डुप्लिकेट करता है, लेकिन 1) बिना स्कैन ओवरहेड के, 2) फ़ाइलों के बिना फिर से आसानी से डायवर्ज कर सकते हैं।


1
पृष्ठभूमि और अधिक जानकारी btrfs.wiki.kernel.org/index.php/Deduplication (संदर्भ सहित cp --reflink, नीचे भी देखें) पर सूचीबद्ध है
मार्सेल वाल्डवोगेल

5

डुप्लिकेट फ़ाइलों को खोजने के लिए आप डफ का उपयोग कर सकते हैं ।

डफ फ़ाइलों के दिए गए सेट में डुप्लिकेट खोजने के लिए एक यूनिक्स कमांड-लाइन उपयोगिता है।

बस चलाते हैं:

duff -r target-folder

स्वचालित रूप से उन फ़ाइलों के लिए हार्डलिंक बनाने के लिए, आपको बैश या किसी अन्य स्क्रिप्टिंग भाषा के साथ डफ के आउटपुट को पार्स करने की आवश्यकता होगी ।


हालांकि धीमी गति से देखें - rdfind.pauldreik.se/#g0.6
ndemou

5
aptitude show hardlink

विवरण: हार्डलिंक एक ही फाइल की कई प्रतियां हार्डलिंक एक उपकरण है जो एक ही फाइल की कई प्रतियों का पता लगाता है और उन्हें हार्डडिंक से बदल देता है।

विचार http://code.google.com/p/hardlinkpy/ से लिया गया है , लेकिन कोड को स्क्रैच से लिखा गया है और एमआईटी लाइसेंस के तहत लाइसेंस प्राप्त है। मुखपृष्ठ: http://jak-linux.org/projects/hardlink/


यहाँ केवल कार्यक्रम का उल्लेख जेंटू के लिए उपलब्ध है बिना अनायास और हार्डलिंक समर्थन के साथ, धन्यवाद!
Jorrit Schippers

4

मैंने यहां उल्लेखित लिनक्स के लिए कई हार्डलिंकिंग टूल का उपयोग किया है। मैं भी Ubuntu पर ext4 fs के साथ फंस गया हूं, और हार्ड / सॉफ्टलिंकिंग के लिए अपने cp -l और -s का उपयोग कर रहा हूं । लेकिन हाल ही में cp मैन पेज में लाइटवेट कॉपी पर ध्यान दिया गया , जो तब तक निरर्थक डिस्क स्थान को खाली कर देगा जब तक कि एक पक्ष संशोधित नहीं हो जाता:

   --reflink[=WHEN]
          control clone/CoW copies. See below

       When  --reflink[=always]  is specified, perform a lightweight copy, where the 
data blocks are copied only when modified.  If this is not possible the
       copy fails, or if --reflink=auto is specified, fall back to a standard copy.

मुझे लगता है कि मैं अपने cpउपनाम को हमेशा --reflink=autoपैरामीटर अब शामिल करूंगा
मार्कोस

1
क्या ext4 वास्तव में समर्थन करता है --reflink?

7
यह btrfs और OCFS2 पर समर्थित है। यह केवल कॉपी-ऑन-राइट फाइलसिस्टम पर संभव है, जो ext4 नहीं है। btrfs वास्तव में आकार ले रहा है। मैं इसे रिफ्लक्स और स्नैपशॉट के कारण उपयोग करना पसंद करता हूं, इससे आपको फाइलों के बड़े पेड़ों पर बड़े पैमाने पर संचालन करने में कम डर लगता है।
क्लैक

3

मुझे लगता है कि फ़ाइल नाम की जाँच पहले चीजों को गति दे सकती है। अगर दो फाइलों में एक ही फ़ाइलनाम की कमी है तो कई मामलों में मैं उन्हें डुप्लिकेट नहीं मानूंगा। लगता है कि सबसे तेज़ तरीका क्रम में तुलना करना होगा:

  • फ़ाइल का नाम
  • आकार
  • md5 चेकसम
  • बाइट सामग्री

क्या कोई विधियाँ ऐसा करती हैं? को देखो duff, fdupes, rmlint, fslint, आदि

निम्न विधि Commandlinefu.com पर शीर्ष-मतदान किया गया था : डुप्लिकेट फ़ाइलें ढूंढें (पहले आकार पर आधारित, फिर MD5 हैश)

क्या फ़ाइल नाम की तुलना को पहले चरण के रूप में जोड़ा जा सकता है, दूसरे चरण के रूप में?

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | \
  xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | \
  sort | uniq -w32 --all-repeated=separate

3
मैंने पाठकों का उपयोग किया है duff, fdupesऔर इनमें से तीसरेrmlint को देखने के लिए पाठकों को दृढ़ता से सलाह देता हूं । इसमें एक उत्कृष्ट विकल्प सेट (और प्रलेखन) है। इसके साथ, मैं अन्य उपकरणों के साथ उपयोग करने के लिए आवश्यक बहुत बाद के प्रसंस्करण से बचने में सक्षम था।
संदिग्ध

3
मेरे अभ्यास में फ़ाइल नाम देखने के लिए सबसे कम विश्वसनीय कारक है, और मैंने इसे किसी भी तरह के प्रयासों से पूरी तरह से हटा दिया है जो मैं डी-डुपिंग करता हूं। install.shएक सक्रिय सिस्टम पर कितनी फाइलें मिल सकती हैं? मैं एक फ़ाइल को सहेजने के लिए कई बार गिन सकता हूं और उसका नाम क्लैश था, जिसे बचाने के लिए कुछ ऑन-द-फ्लाई का नाम बदला गया। फ्लिप पक्ष: पता नहीं कितनी बार मैंने विभिन्न स्रोतों से कुछ डाउनलोड किया है, अलग-अलग दिनों में, केवल यह जानने के लिए कि वे अलग-अलग नामों के साथ एक ही फ़ाइल हैं। (जो टाइमस्टैम्प विश्वसनीयता को भी मारता है।) 1: आकार, 2: डाइजेस्ट, 3: बाइट सामग्री।
जिप्सी स्पेल्वर

@GypsySpellweaver: (1) व्यक्तिगत उपयोग के मामले पर निर्भर करता है, क्या आप सहमत नहीं होंगे? मेरे मामले में, मेरे पास कई बैकअप से कई पुनर्स्थापित हैं, जहां एक ही नाम और सामग्री वाली फाइलें अलग-अलग पुनर्स्थापना फ़ोल्डर में मौजूद हैं। (२) आपकी टिप्पणी केवल फ़ाइल नाम की तुलना करने के लिए मानती है । मैं अन्य चेक को खत्म करने का सुझाव नहीं दे रहा था।
जॉनी

2

चूँकि मैं पर्ल का प्रशंसक नहीं हूँ, यहाँ एक bash संस्करण है:

#!/bin/bash

DIR="/path/to/big/files"

find $DIR -type f -exec md5sum {} \; | sort > /tmp/sums-sorted.txt

OLDSUM=""
IFS=$'\n'
for i in `cat /tmp/sums-sorted.txt`; do
 NEWSUM=`echo "$i" | sed 's/ .*//'`
 NEWFILE=`echo "$i" | sed 's/^[^ ]* *//'`
 if [ "$OLDSUM" == "$NEWSUM" ]; then
  echo ln -f "$OLDFILE" "$NEWFILE"
 else
  OLDSUM="$NEWSUM"
  OLDFILE="$NEWFILE"
 fi
done

यह सभी फाइलों को एक ही चेकसम (चाहे वे बड़े हों, छोटे हों, या पहले से हार्डलिंक हों) के साथ ढूंढते हैं, और उन्हें एक साथ हार्डलिंक करते हैं।

अतिरिक्त फ़्लैग फ़्लैग (जैसे आकार) और फ़ाइल कैश के साथ बार-बार रन के लिए इसे बहुत अनुकूलित किया जा सकता है (ताकि आपको हर बार चेकसम को फिर से करना न पड़े)। अगर किसी को होशियार, लंबे संस्करण में दिलचस्पी है, तो मैं इसे पोस्ट कर सकता हूं।

नोट: जैसा कि पहले उल्लेख किया गया है, हार्डलिंक तब तक काम करते हैं जब तक फ़ाइलों को संशोधन की आवश्यकता नहीं होती है, या फाइल सिस्टम में स्थानांतरित नहीं किया जाता है।


मैं आपकी स्क्रिप्ट कैसे बदल सकता हूं, ताकि इसे हार्डलिंक करने के बजाय, यह केवल डुप्लिकेट फ़ाइलों को हटा देगा और सीएसवी में एक प्रविष्टि जोड़ देगा हटाए गए फ़ाइल -> लाइन की गई फ़ाइल। । ???
MR.GEWA

ज़रूर। हार्ड लिंक लाइन: echo ln -f "$ OLDFILE" "$ NEWFILE" बस एक हार्ड लिंक के साथ डुप्लिकेट फ़ाइल को बदल देता है, इसलिए आप इसके बजाय $ NEWFILE को बदल सकते हैं।
seren

और अगली पंक्ति में कैसे, किसी पाठ फ़ाइल में किसी तरह $ OLDFILE-> NEWFILE लिखें ???
MR.GEWA

आह, ठीक है। हाँ, इस तरह के रूप rm के बाद एक पंक्ति जोड़ें: गूंज "$ NEWFILE" >> /var/log/deleted_duplicate_files.log
seren

2
फ्रिंजिन पहिया को सुदृढ़ न करें। अधिक परिपक्व समाधान उपलब्ध हैं, जैसे rdfind, कि देशी गति पर काम करता है और बस स्थापित करने brew install rdfindया apt-get install rdfindप्राप्त करने की आवश्यकता होती है।
oligofren

1

मैंने एक पर्ल स्क्रिप्ट बनाई, जो आपके बारे में बात करने के समान है:

http://pastebin.com/U7mFHZU7

मूल रूप से, यह सिर्फ एक निर्देशिका का पता लगाता है, इसमें फाइलों के SHA1sum की गणना करता है, इसे हैशिंग करता है और मैचों को एक साथ जोड़ता है। यह कई, कई अवसरों पर काम में आता है।


2
मुझे उम्मीद है कि जल्द ही इसे आजमाने की उम्मीद है ... क्यों इसे CPAN पर अपलोड नहीं किया गया ... App :: relink or something
xenoterracide

2
@xenoterracide: सभी समान और अधिक परिपक्व समाधानों के कारण जो पहले से मौजूद हैं। अन्य उत्तर देखें, विशेष रूप से rdfind।
oligofren

1
@oligofren मुझे संदेह नहीं है कि बेहतर समाधान मौजूद हैं। TMTOWTDI मुझे लगता है।
amphetamachine

1

यदि आप मैक या किसी भी यूनिक्स आधारित प्रणाली पर हार्ड लिंक्स द्वारा डुप्लिकेट को बदलना चाहते हैं, तो आप SmartDupe http://sourceforge.net/projects/smartdupe/ इसे विकसित कर रहे हैं


3
क्या आप समझ सकते हैं कि यह कैसे "स्मार्ट" है?
स्टीफन जिमेनेज़

1
मैं दो अलग-अलग निर्देशिकाओं की फ़ाइलों की तुलना कैसे कर सकता हूं?
बुरकार्डो

1

Applicatios FSLint ( http://www.pixelbeat.org/fslint/ ) किसी भी फ़ोल्डर में (सामग्री द्वारा) सभी समान फ़ाइलें पा सकते हैं और हार्डलिंक बना सकते हैं। कोशिश करो!

जार्ज सम्प्रायो


यह 1TB लगभग पूर्ण ext3 हार्डडिस्क को स्कैन करता है, पूरे सिस्टम को क्रॉल में लाता है। "खोज" के 14 घंटे बाद निरस्त
एंग्सुमन चक्रवर्ती

1

jdupes एक टिप्पणी में उल्लेख किया गया है, लेकिन अपने स्वयं के जवाब के हकदार हैं, क्योंकि यह संभवतः सबसे अधिक वितरण में उपलब्ध है और बहुत तेजी से चलता है (यह 98% पूर्ण 158 जीबी विभाजन (एसएसडी ड्राइव) के 2.7% को एक मिनट में मुक्त कर दिया है):

jdupes -rL /foo/bar

0

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

बेहतर तरीका फाइलसिस्टम परत पर कटौती है। आप BTRFS (पिछली बार बहुत लोकप्रिय), OCFS या इस तरह का उपयोग कर सकते हैं। पृष्ठ देखें: https://en.wikipedia.org/wiki/Comparison_of_file_systems , तालिका विशेषताएँ और स्तंभ डेटा कटौती पर विशेष। आप इसे क्लिक कर सकते हैं और सॉर्ट कर सकते हैं :)

विशेष रूप से ZFS फाइलसिस्टम को देखें। यह FUSE के रूप में उपलब्ध है, लेकिन इस तरह यह बहुत धीमा है। यदि आप मूल समर्थन चाहते हैं, तो पृष्ठ http://zfsonlinux.org/ देखें । फिर आपको कर्नेल को पैच करना होगा, और मैनगामेंट के लिए अगली बार zfs टूल इंस्टॉल करना होगा। मुझे समझ में नहीं आता, क्यों लिनक्स ड्राइवरों के रूप में समर्थन नहीं करता है, यह कई अन्य ऑपरेटिंग सिस्टम / गुठली के लिए रास्ता है।

फ़ाइल सिस्टम 2 तरीकों से डिडुप्लीकेशन का समर्थन करता है, फाइलों को डुप्लीकेट करता है या ब्लॉक करता है। ZFS ब्लॉक का समर्थन करता है। इसका मतलब है, समान सामग्री जो एक ही फ़ाइल में दोहराई जाती है, उसे काट दिया जा सकता है। अन्य तरीका वह समय है जब डेटा काट दिया जाता है, यह ऑनलाइन (zfs) या ऑफलाइन (btrfs) हो सकता है।

सूचना, समर्पण रैम की खपत करता है। यह है, क्यों FFS के साथ घुड़सवार ZFS वॉल्यूम के लिए फाइल लिखना, नाटकीय रूप से धीमी गति से प्रदर्शन का कारण बनता है। यह प्रलेखन में वर्णित है। लेकिन आप ऑनलाइन वॉल्यूम पर कटौती बंद / निर्धारित कर सकते हैं। यदि आप देखते हैं कि कोई डेटा डिडुप्लिकेट किया जाना चाहिए, तो आप बस डिडुप्लीकेशन सेट करते हैं, किसी फाइल को किसी भी अस्थायी और फिर से बदलने के लिए फिर से लिखते हैं। इसके बाद आप डिडुप्लीकेशन बंद कर सकते हैं और पूर्ण प्रदर्शन को बहाल कर सकते हैं। बेशक, आप किसी भी कैश डिस्क को स्टोर करने के लिए जोड़ सकते हैं। यह बहुत तेजी से घुमाए जाने वाले डिस्क या एसएसडी डिस्क हो सकते हैं। बेशक यह बहुत छोटे डिस्क हो सकते हैं। असली काम में यह रैम के लिए प्रतिस्थापन है :)

लिनक्स के तहत आपको ZFS के लिए ध्यान रखना चाहिए क्योंकि यह सब काम नहीं करना चाहिए, जैसे कि जब आप फाइल सिस्टम का प्रबंधन करते हैं, तो स्नैपशॉट बनाते हैं, लेकिन यदि आप कॉन्फ़िगरेशन करते हैं और इसे नहीं बदलते हैं, तो सभी ठीक से काम करते हैं। दूसरे तरीके से, आपको लिनक्स को ओपेनरोलिसिस में बदलना चाहिए, यह मूल रूप से जेडएफएस का समर्थन करता है :) जेडएफएस के साथ बहुत अच्छा क्या है, यह फाइलसिस्टम के रूप में काम करता है, और एलवीएम के समान वॉल्यूम मैनेजर। ZFS का उपयोग करने पर आपको इसकी आवश्यकता नहीं है। यदि आप अधिक जानकारी चाहते हैं तो दस्तावेज़ीकरण देखें।

ZFS और BTRFS के बीच सूचना अंतर। ZFS वृद्ध और अधिक परिपक्व है, दुर्भाग्य से केवल सोलारिस और ओपनसोलारिस के तहत (दुर्भाग्य से अलंकृत द्वारा गला हुआ)। BTRFS युवा है, लेकिन पिछली बार बहुत अच्छी तरह से समर्थित है। मैं ताजा गिरी की सलाह देता हूं। ZFS के पास ऑनलाइन डिडुप्लीकेशन है, जो धीमा लिखता है, क्योंकि सभी की गणना ऑनलाइन की जाती है। बीटीआरएफएस ऑफ-लाइन डिडुप्लीकेशन का समर्थन करता है। फिर यह प्रदर्शन को बचाता है, लेकिन जब मेजबान के पास करने के लिए कुछ नहीं होता है, तो आप समय-समय पर उपकरण को कटौती के लिए चलाते हैं। और BTRFS मूल रूप से लिनक्स के तहत बनाई गई है। शायद यह आपके लिए बेहतर है FS :)


1
मुझे ऑफलाइन (या बैच ) डिडुप्लीकेशन अप्रोच पसंद btrfsहै। विकल्पों की उत्कृष्ट चर्चा ( cp --reflinkविकल्प सहित ) यहाँ: btrfs.wiki.kernel.org/index.php/Deduplication
मार्सेल

ZFS केवल सोलारिस या ओपनसोलारिस नहीं है। यह मूल रूप से FreeBSD में समर्थित है। इसके अलावा, ZFS लिनक्स पर है डिवाइस आधारित चालक; FUSE पर ZFS एक अलग बात है।
केजे सीफ्रेड ने

0

हार्ड लिंक सबसे अच्छा विचार नहीं हो सकता है; यदि कोई उपयोगकर्ता फ़ाइल बदलता है, तो यह दोनों को प्रभावित करता है। हालाँकि, हार्ड लिंक को हटाना दोनों फ़ाइलों को नहीं हटाता है। साथ ही, मुझे पूरी तरह से यकीन नहीं है कि अगर हार्ड लिंक एक ही फ़ाइल की कई प्रतियों के रूप में एक ही स्थान (हार्ड डिस्क पर, ओएस पर नहीं) को लेते हैं; विंडोज के अनुसार (लिंक शैल एक्सटेंशन के साथ), वे करते हैं। दी, यह विंडोज है, यूनिक्स नहीं ...

मेरा समाधान एक छिपे हुए फ़ोल्डर में "सामान्य" फ़ाइल बनाना होगा, और प्रतीकात्मक लिंक के साथ वास्तविक डुप्लिकेट को प्रतिस्थापित करना होगा ... फिर, प्रतीकात्मक लिंक मेटाडेटा या वैकल्पिक फ़ाइल धाराओं के साथ एम्बेड किए जाएंगे जो केवल दो "फाइल" रिकॉर्ड करते हैं एक दूसरे से अलग हैं, जैसे अगर कोई व्यक्ति फ़ाइल नाम बदलना चाहता है या कस्टम एल्बम कला या ऐसा कुछ और जोड़ना चाहता है; यह डेटाबेस अनुप्रयोगों के बाहर भी उपयोगी हो सकता है, जैसे कि एक ही गेम या सॉफ़्टवेयर के कई संस्करण स्थापित किए गए हैं और यहां तक ​​कि सबसे छोटे अंतर के साथ स्वतंत्र रूप से उनका परीक्षण किया गया है।


0

सबसे आसान तरीका है विशेष प्रोग्राम डूपगुरु का उपयोग करना

डुप्गुरु प्राथमिकताएँ स्क्रीनशॉट

जैसा कि प्रलेखन कहता है

हटाने के विकल्प

ये विकल्प प्रभावित करते हैं कि डुप्लिकेट विलोपन कैसे होता है। अधिकांश समय, आपको उनमें से किसी को भी सक्षम करने की आवश्यकता नहीं है।

हटाई गई फ़ाइलें लिंक करें:

हटाए गए फ़ाइलों को संदर्भ फ़ाइल के लिंक से बदल दिया जाता है। आपके पास इसे सिंपलिंक या हार्डलिंक के साथ बदलने का विकल्प है। ... एक सिमिलिंक फ़ाइल के पथ का एक शॉर्टकट है। यदि मूल फ़ाइल हटा दी जाती है या स्थानांतरित कर दी जाती है, तो लिंक टूट जाता है। हार्डलिंक फ़ाइल के लिए एक लिंक है। यह लिंक "वास्तविक" फ़ाइल जितना ही अच्छा है। केवल जब किसी फ़ाइल के सभी हार्डलिंक हटा दिए जाते हैं, तो फ़ाइल ही हटा दी जाती है।

ओएसएक्स और लिनक्स पर, यह सुविधा पूरी तरह से समर्थित है, लेकिन विंडोज के तहत, यह थोड़ा जटिल है। Windows XP इसका समर्थन नहीं करता, लेकिन विस्टा और इसका समर्थन करता है। हालांकि, काम करने की सुविधा के लिए, डुप्गुरु को प्रशासनिक विशेषाधिकारों के साथ चलना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.