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


20

मेरे पास दो फ़ोल्डर्स हैं जिनमें विभिन्न फाइलें हैं। पहले फोल्डर की कुछ फाइलें दूसरे फोल्डर में हूबहू कॉपी होती हैं। मैं उन लोगों को एक हार्ड लिंक से बदलना चाहूंगा। मैं उसे कैसे कर सकता हूँ?


2
कृपया OS और फाइल सिस्टम प्रदान करें।
स्टीवन

वैसे, मैं ubuntu 15.04 पर ext4 का उपयोग करता हूं, लेकिन यदि कोई व्यक्ति किसी अन्य ओएस के लिए उत्तर प्रदान करता है, तो मुझे यकीन है कि यह प्रश्न पढ़ने वाले किसी व्यक्ति के लिए सहायक हो सकता है।
qdii

जवाबों:


20

मुझे लिनक्स के लिए 4 कमांड-लाइन समाधानों का पता है। rdfindसभी विकल्पों में से उपलब्ध होने के कारण , मेरा पसंदीदा यहां अंतिम सूचीबद्ध है ।

fdupes

  • यह सबसे अधिक अनुशंसित / सबसे प्रसिद्ध एक प्रतीत होता है।
  • यह उपयोग करने के लिए सबसे सरल है, लेकिन इसकी एकमात्र क्रिया डुप्लिकेट को हटाना है।
  • यह सुनिश्चित करने के लिए कि डुप्लिकेट वास्तव में डुप्लिकेट हैं (जबकि चलाने के लिए हमेशा नहीं ले रहे हैं), फाइलों के बीच तुलना पहले फ़ाइल आकार द्वारा की जाती है, फिर md5 हैश, फिर बाय-बाय-बाइट तुलना।

नमूना उत्पादन (विकल्प "शो आकार", "पुनरावर्ती") के साथ:

$ fdupes -Sr .
17 bytes each:                          
./Dir1/Some File
./Dir2/SomeFile

hardlink

  • जैसा कि नाम से पता चलता है, डिज़ाइन की गई फ़ाइलों को हार्डलिंक से बदल दें।
  • एक --dry-runविकल्प है।
  • यह इंगित नहीं करता है कि सामग्री की तुलना कैसे की जाती है, लेकिन अन्य सभी विकल्पों के विपरीत, खाता मोड, स्वामी और संशोधित समय को ध्यान में रखता है।

नमूना आउटपुट (ध्यान दें कि मेरी दो फ़ाइलों का संशोधित समय कितना अलग है, इसलिए दूसरे रन में मैं इसे अनदेखा करने के लिए कहता हूं):

$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500

$ hardlink --dry-run -v .
Mode:     dry-run
Files:    5
Linked:   0 files
Compared: 0 files
Saved:    0 bytes
Duration: 0.00 seconds

$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode:     dry-run
Files:    5
Linked:   1 files
Compared: 1 files
Saved:    17 bytes
Duration: 0.00 seconds

गूंथा हुआ आटा

  • उन फ़ाइलों को खोजने के लिए बनाया गया है जो उपयोगकर्ता तब कार्य करता है; कोई क्रिया उपलब्ध नहीं है।
  • तुलना फ़ाइल आकार द्वारा की जाती है, फिर sha1 हैश।
    • हैश को sha256, sha384, या sha512 में बदला जा सकता है।
    • हैश को बाइट-बाइट तुलना करने के लिए अक्षम किया जा सकता है

नमूना आउटपुट (विकल्प "पुनरावर्ती" के साथ):

$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File

rdfind

  • विकल्पों में एक असामान्य वाक्यविन्यास होता है (नकल करने के लिए find?)।
  • डुप्लिकेट फ़ाइलों को हटाने के लिए कार्रवाई के लिए कई विकल्प (हटाएं, सहानुभूति बनाएं, हार्डलिंक बनाएं)।
  • ड्राई-रन मोड है।
  • तुलना फ़ाइल आकार द्वारा की जाती है, फिर पहले-बाइट्स, फिर अंतिम-बाइट्स, फिर md5 (डिफ़ॉल्ट) या sha1।
  • फाइलों की रैंकिंग यह अनुमान लगाने योग्य बनाती है कि कौन सी फाइल को मूल माना जाता है।

नमूना उत्पादन:

$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.

$ cat results.txt 
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file

1
"तब md5 (डिफ़ॉल्ट) या sha1 इसका मतलब यह नहीं है कि फाइलें समान हैं। चूंकि हैश की गणना करने के लिए प्रोग्राम को पूरी फ़ाइल को वैसे भी पढ़ने की आवश्यकता होती है, इसलिए इसे पूरी फ़ाइलों की बाइट के लिए तुलना करनी चाहिए। सीपीयू समय भी बचाता है।
एंडोलिथ

@endolith इसीलिए आप हमेशा ड्राय-रन से शुरुआत करते हैं, देखना होगा कि क्या होता है ...
इज़्काता

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


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

6

डुप्लिकेट कमांडर विंडोज पर एक संभावित समाधान है:

डुप्लिकेट कमांडर एक फ्रीवेयर एप्लिकेशन है जो आपको अपने पीसी पर डुप्लिकेट फ़ाइलों को खोजने और प्रबंधित करने की अनुमति देता है। डुप्लिकेट कमांडर कई सुविधाओं और उपकरणों के साथ आता है जो आपको उन डुप्लिकेट से अपने डिस्क स्थान को पुनर्प्राप्त करने की अनुमति देते हैं।

विशेषताएं:

Replacing files with hard links
Replacing files with soft links
... (and many more) ...

1

लिनक्स के लिए आप यहां बैश स्क्रिप्ट पा सकते हैं ।


2

डुप्लिकेट और समान फ़ाइल खोजक अभी तक विंडोज पर एक और समाधान है:

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

यहां छवि विवरण दर्ज करें


1

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

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


1

मैं jdupes की अत्यधिक अनुशंसा करता हूं । यह fdupes का बढ़ा हुआ कांटा है , लेकिन इसमें ये भी शामिल हैं:

  • नए कमांड-लाइन विकल्पों का एक गुच्छा - सहित --linkhard, या -Lसंक्षेप में
  • सभी प्रमुख ओएस प्लेटफार्मों के लिए मूल समर्थन
  • गति औसत से fdupes की तुलना में 7 गुना अधिक तेज होने के लिए कहा

अपने प्रश्न के लिए, आप बस निष्पादित कर सकते हैं $ jdupes -L /path/to/your/files

आप अपने GitHub रेपो से नवीनतम स्रोत का क्लोन और निर्माण करना चाह सकते हैं क्योंकि परियोजना अभी भी सक्रिय विकास के अधीन है। यहां विंडोज बायनेरिज़ भी दिए गए हैं। पैकेज्ड बायनेरिज़ कुछ लिनक्स / बीएसडी डिस्ट्रोस में उपलब्ध हैं - वास्तव में मैंने पहली बार इसके माध्यम से पाया $ apt search

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