হার্ডলিঙ্কগুলির সাথে সদৃশ ফাইলগুলি প্রতিস্থাপনের কোনও সহজ উপায় আছে?


136

আমি findদুটি ডিরেক্টরিতে নকল ফাইলগুলি খুঁজে পেতে এবং অন্য ডিরেক্টরিতে ফাইলগুলির হার্ডলিঙ্কগুলির সাথে একটি ডিরেক্টরিতে ফাইলগুলি প্রতিস্থাপনের জন্য একটি সহজ উপায় (একটি কমান্ড বা কমান্ডের সিরিজ, সম্ভবত জড়িত ) সন্ধান করছি।

পরিস্থিতি এখানে: এটি একটি ফাইল সার্ভার যা একাধিক লোক অডিও ফাইলগুলি সংরক্ষণ করে, প্রতিটি ব্যবহারকারীর নিজস্ব ফোল্ডার রয়েছে। কখনও কখনও একাধিক ব্যক্তির ঠিক একই অডিও ফাইলগুলির অনুলিপি থাকে। এখনই, এগুলি সদৃশ। আমি এটি তৈরি করতে চাই যাতে তারা হার্ডলিঙ্ক হয়, হার্ড ড্রাইভের জায়গা বাঁচাতে।


20
হার্ডলিঙ্কগুলির মধ্যে আপনি যে সমস্যার সমাধান করতে পারেন তা হ'ল যদি কেউ তাদের মিউজিক ফাইলগুলির সাথে কিছু করার সিদ্ধান্ত নিয়ে থাকে যা আপনি কঠোরভাবে যুক্ত করেছেন তারা অজান্তেই তাদের সংগীতটিতে অন্য লোকের অ্যাক্সেসকে প্রভাবিত করতে পারে।
স্টিভেন ডি

4
অন্য সমস্যাটি হ'ল "কিছু সত্যিই দুর্দান্ত সুর" সম্বলিত দুটি পৃথক ফাইল, একই এনকোডার সহ একই উত্স থেকে নেওয়া হলেও সম্ভবত বিট-বিট অভিন্ন নয়।
এমএসডব্লু

3
সার্বজনীন সংগীত ফোল্ডারটি থাকতে পারে আরও ভাল সমাধান ...
স্টেফান


1
@ ট্যান্ট: সিমলিংক ব্যবহার করা কোনও সমস্যা সমাধান করে না। যখন কোনও ব্যবহারকারী কোনও ফাইল "মুছে ফেলেন", তখন এর লিঙ্কের সংখ্যা হ্রাস পাবে, যখন গণনা শূন্যে পৌঁছবে, ফাইলগুলি সত্যিই মুছে ফেলা হবে, এগুলিই। হার্ডলিঙ্কযুক্ত ফাইলগুলির সাথে মুছে ফেলা কোনও সমস্যা নয়, কেবলমাত্র সমস্যাটি একজন ব্যবহারকারী ফাইল সম্পাদনা করার চেষ্টা করছেন (প্রকৃতপক্ষে অপ্রতিরোধ্য) বা এটি ওভাররাইট করতে (লগ ইন থাকলে যথেষ্ট সম্ভব)।
মার্টিনাস

উত্তর:


41

Http://cpansearch.perl.org/src/ANDK/Perl-Repository-APC-2.002/eg/trimtrees.pl এ একটি পার্ল স্ক্রিপ্ট রয়েছে যা আপনি যা চান ঠিক তা করে:

কমান্ড লাইনে অবস্থিত সমস্ত ডিরেক্টরি অতিক্রম করুন, MD5 চেকসামগুলি গণনা করুন এবং অভিন্ন MD5 সহ ফাইলগুলি সন্ধান করুন। যদি তারা সমান হয় তবে সত্যই তুলনা করুন যদি তারা সত্যই সমান হয় তবে দুটি ফাইলের দ্বিতীয়টিকে প্রথমটির সাথে একটি হার্ড লিঙ্ক দিয়ে প্রতিস্থাপন করুন।


মনে হচ্ছে নিখুঁত , ধন্যবাদ !! আমি এটি চেষ্টা করব এবং যদি এটি বর্ণিত হিসাবে কাজ করে তবে তা গ্রহণ করব!
জোশ

3
এটি আমি যা চেয়েছিলাম ঠিক তাই করেছিল। তবে আমি বিশ্বাস করি যে অবদানের সাথে জেডএফএস শেষ পর্যন্ত করার উপায় হবে, যেহেতু আমি খুঁজে পেলাম যে ফাইলগুলির মধ্যে সামান্য পার্থক্য রয়েছে তাই কেবল কয়েকজনকেই হার্ডলিঙ্ক করা যেতে পারে।
জোশ

11
এটিকে উজ্জীবিত করা হয়েছে, তবে আরও কিছু গবেষণা করার পরে, আমি এর মধ্যে যা করি নি। rdfindসমস্ত বড় প্ল্যাটফর্মগুলির জন্য প্যাকেজ পরিচালকদের মাধ্যমে উপলব্ধ (ওএস এক্স, লিনাক্স, (সাইগ) জয়, সোলারিস), এবং জ্বলন্ত দেশীয় গতিতে কাজ করে। সুতরাং নীচের উত্তরটি দেখুন।
অলিগোফ্রেন

@ লিগোফ্রেন আমিও একই চিন্তা করছিলাম তবে আমি আঘাত করলাম [Errno 31] Too many links। এই স্ক্রিপগুলি হ'ল এটিই হ'ল একমাত্র জিনিস।
ফুনেহে

5
অভিন্ন আকারের সাথে কমপক্ষে অন্য একটি উপস্থিত থাকা ফাইলের চেয়ে প্রতিটি একক ফাইলের চেকসামিং অকারণে অকার্যকর (এবং অকারণে হ্যাশের সংঘর্ষের ঝুঁকিতে পড়ে) is
চার্লস ডাফি

85

rdfindআপনি যা চান ঠিক তা করে (এবং ক্রমানুসারে কেন তালিকাগুলি থাকে)। সদৃশগুলি মুছে ফেলা, নরম বা শক্ত লিঙ্কগুলির সাথে এগুলি প্রতিস্থাপন করা সম্ভব করে তোলে। symlinksআপনার সাথে একত্রিত হয়ে সিমিলিংকে নিখুঁত বা আপেক্ষিকও করতে পারে। আপনি চেকসাম অ্যালগরিদম (এমডি 5 বা শ 1) চয়ন করতে পারেন।

যেহেতু এটি সংকলিত হয়েছে এটি বেশিরভাগ স্ক্রিপ্টযুক্ত সমাধানগুলির চেয়ে দ্রুততর: time২০০৯ সাল থেকে আমার ম্যাক মিনিতে ২00০০ টি ফাইল সহ একটি 15 জিআইবি ফোল্ডারে এটি ফিরে আসে

9.99s user 3.61s system 66% cpu 20.543 total

(এমডি 5 ব্যবহার করে)।

বেশিরভাগ প্যাকেজ হ্যান্ডলারগুলিতে উপলভ্য (যেমন ম্যাক ওএস এক্সের জন্য ম্যাকপোর্ট)।


11
+1 আমি এটি ব্যবহার করেছি rdfindএবং পছন্দ করেছি। এটির একটি -dryrun trueবিকল্প রয়েছে যা আপনাকে জানায় যে এটি কী করে। হার্ড লিঙ্কগুলির সাথে সদৃশগুলি প্রতিস্থাপন করা সহজ -makehardlinks true। এটি একটি দুর্দান্ত লগ তৈরি করেছে এবং এটি আমাকে জানতে দেয় যে কতটা জায়গা মুক্ত হয়েছিল। প্লাস, লেখকের মানদণ্ড অনুসারে , আরডিফাইন্ড ডফ এবং fslint এর চেয়ে দ্রুত।
ড্যানিয়েল ট্রেবিয়েন

ওহ, সুন্দর আমি fdupes ব্যবহার করতাম, তবে হার্ডলিঙ্কিং ডুপসের জন্য এর -L বিকল্পটি সর্বশেষ উবুন্টু 14.10 এ অনুপস্থিত। বেশ ধীর ছিল, এবং ওএসএক্সে হোমব্রুয়ের জন্য উপস্থিত ছিল না, সুতরাং এই উত্তরটি আরও ভাল। ধন্যবাদ!
অলিগোফ্রেন 3'15

খুব স্মার্ট এবং দ্রুত অ্যালগরিদম।
nddou

2
আমি সন্দেহ করি যে এই সরঞ্জামটির কার্যকারিতাটির অ্যালগরিদম নিজেই আরও বেশি করার আছে এবং এটি কোনও সংকলিত সরঞ্জাম বা স্ক্রিপ্ট কিনা তা নিয়ে কম কাজ। এই ধরণের অপারেশনের জন্য, প্রায় বেশিরভাগ সময়ই ডিস্ক বাধা হয়ে দাঁড়ায়। যতক্ষণ স্ক্রিপ্টযুক্ত সরঞ্জামগুলি নিশ্চিত করে যে চেকসামগুলিতে সিপিইউ বার্ন করার সময় তারা একটি অ্যাসিঙ্ক আই / ও ক্রিয়াকলাপ চলছে, তাদের একটি নেটিভ বাইনারি পাশাপাশি সম্পাদন করা উচিত।
সিডিউইউই

rdfind নতুন ওএস এবং সংকলকের উপর খুব নির্ভরশীল। (উন্নয়নের সরঞ্জামগুলির সম্পূর্ণ পুনর্নির্মাণ ব্যতীত CentOS 6.x এ চলবে না)
কস্মো এফ

49

fdupesসরঞ্জামটি ব্যবহার করুন :

fdupes -r /path/to/folderআপনাকে ডিরেক্টরিতে নকলের একটি তালিকা দেয় (-r এটি পুনরাবৃত্ত করে তোলে)। আউটপুটটি দেখতে এটির মতো দেখাচ্ছে:


ফাইলের
নাম 1 ফাইলের নাম 2

filename3
filename4
filename5


ফাইলের নাম 1 এবং ফাইলের নাম 2 অভিন্ন এবং ফাইলের নাম 3, ফাইলের নাম 4 এবং ফাইলের নাম 5ও অভিন্ন রয়েছে।


1
উবুন্টু দ্রষ্টব্য: ২০১৩ সালের সেপ্টেম্বর পর্যন্ত এটির স্থিতিশীল প্রকাশ হয়নি (এটি 1.50-PR2-3 এ রয়েছে), তাই আপডেটটি এখনও উবুন্টুতে উপস্থিত হয় না।
স্টুয়ার্ট অ্যাক্সন

11
আমি কেবল উবুন্টু এবং দেবিয়ান উভয়েই fdupes_1.50-PR2-4 ইনস্টল করার চেষ্টা করেছি, উভয়েরই -L পতাকা নেই। ভাগ্যক্রমে github.com/tobiasschulz/fdupes থেকে বিল্ডিং করা অত্যন্ত সহজ ছিল।
neu242

3
চেষ্টা করুন rdfind- পছন্দ করুন fdupesতবে দ্রুত এবং ওএস এক্স এবং সিগউইনেও উপলভ্য।
অলিগোফ্রেন

6
fdupesদেখে মনে হচ্ছে কেবল অনুলিপিগুলি খুঁজে পাওয়া যায়, হার্ডলিঙ্কগুলি এগুলি প্রতিস্থাপন করে না, সুতরাং আইএমও প্রশ্নের উত্তর নয়।
ক্যালিমো

2
jdupesএর উপর ভিত্তি করে বলা একটি অনুরূপ সরঞ্জাম রয়েছে fdupesতবে এটি ডুপ্লিকেট ফাইলগুলি সিমলিংক ( -l), হার্ডলিঙ্কস ( -L) এর সাথে প্রতিস্থাপন করতে পারে বা ফাইলসিস্ট্রি স্তরে ব্লকগুলি অনুলিপি করতে বিটিআরএফকে নির্দেশ দিতে পারে ( -Bযদি আপনি বিটিআরএফ ব্যবহার করছেন)।
মারিয়াস গেডমিনাস

23

আমি http://jak-linux.org/projects/hardlink/hardlink থেকে ব্যবহার করি


1
ভাল ইঙ্গিত, আমি একটি নিয়মিত বেস কোড. google.google.com/p/hardlinkpy এ ব্যবহার করছি তবে এটি কিছুক্ষণের জন্য আপডেট করা হয়নি ...
মেডুজ

2
এটি hardlinkফেডোরা / আরএইচইএল / ইত্যাদির মূলটির সাথে মিল বলে মনে হচ্ছে ।

1
hardlinkএখন অনেক লিনাক্স প্যাকেজ সিস্টেমে দেশীয় বাইনারি (২০১৪ সাল থেকে) এবং অত্যন্ত দ্রুত extremely 1,2M ফাইলের জন্য (320 গিগাবাইট), এটি মাত্র 200 সেকেন্ড সময় নিয়েছে (ফাইলগুলির প্রায় 10% লিঙ্ক করে)।
মার্সেল ওয়াল্ডভোগেল

FWIW, উপরোক্ত hardlinkজুলিয়ান আন্দ্রেজ Klode দ্বারা তৈরি করা হয়েছে যখন ফেডোরা hardlinkJakub Jelinek (সূত্র: দ্বারা তৈরি করা হয়েছে pagure.io/hardlink - ফেডোরা প্যাকেজের নাম: hardlink)
maxschlepzig

18

এটি "fslint" দ্বারা সরবরাহিত একটি ফাংশন - http://en.flossmanouts.net/FSlint/ পরিচয়

"মার্জ" বোতামটি ক্লিক করুন:

স্ক্রিনশট


4
-ম একসাথে হার্ডলিঙ্ক করবে, -ডি একটি ব্যতীত সমস্ত মুছে ফেলবে, এবং - এটি শুকিয়ে যাবে, যা করবে তা মুদ্রণ করবে
Azendale

1
উবুন্টু এখানে উপর কি করতে: sudo apt-get install fslint /usr/share/fslint/fslint/findup -m /your/directory/tree(/ usr / শেয়ার / fslint / fslint / না $ PATH- এ ডিফল্ট ভাবে হয়)
Jocelyn

14

যেহেতু আপনার প্রধান টার্গেটটি ডিস্কের স্থান সংরক্ষণ করা, অন্য একটি সমাধান রয়েছে: ফাইল সিস্টেম স্তরে ডি-ডুপ্লিকেশন (এবং সম্ভবত সংক্ষেপণ)। হার্ড-লিঙ্ক সমাধানের সাথে তুলনা করে, এটি অযাচিতভাবে অন্যান্য লিঙ্কযুক্ত ফাইলগুলিকে প্রভাবিত করার সমস্যা নেই।

জেডএফএসের পুল সংস্করণ 23 সাল থেকে ডিপআপ (ব্লক-স্তর, ফাইল-স্তর নয়) রয়েছে এবং দীর্ঘকাল থেকেই সংকোচনের ব্যবস্থা রয়েছে। আপনি যদি লিনাক্স ব্যবহার করে থাকেন তবে আপনি zfs-fuse ব্যবহার করতে পারেন, বা আপনি BSD ব্যবহার করেন তবে এটি স্থানীয়ভাবে সমর্থিত।


এইভাবেই সম্ভবত আমি শেষ পর্যন্ত যাব, তবে, বিএসডি এর জেডএফএস বাস্তবায়ন কি ছাড় দেয়? আমি ভেবেছি এটা হয়নি।
জোশ

তদ্ব্যতীত, ড্রাগনফ্লাই বিএসডি-তে HAMMER ফাইল সিস্টেমের প্রতিলিপি সমর্থন রয়েছে।
হাহামু

14
জেডএফএস ডিডআপ কারও বন্ধু নয়। জেডএফএস যেখানে 1 টিবি ব্যবহারযোগ্য ডিস্ক স্পেস প্রতি 1 জিবি র‌্যামের প্রস্তাব দেয়, আপনি যদি 1 টিবি ব্যবহারযোগ্য ডিস্ক স্পেসে 32 জিবি র‌্যামের চেয়ে কম র‌্যামের সাহায্যে ডিডআপ ব্যবহার করার চেষ্টা করেন তবে আপনি 'বাদাম'। এর অর্থ হ'ল 1 টিবি আয়নাটির জন্য, যদি আপনার কাছে 32 গিগাবাইট র‌্যাম না থাকে, আপনি সম্ভবত মেমরি বোমার সাথে শীঘ্রই বা পরে মুখোমুখি হতে পারেন যা মেষটির অভাবের কারণে মেশিনটি থামিয়ে দেবে। সেখানে থাকুন, এটি করেছেন, এখনও পিটিএসডি থেকে সেরে উঠছেন।
খুনিবাদক

4
অনলাইন ডুপ্লিকেশন (যেমন প্রতিটি লেখার উপর পরীক্ষা করুন) সহ অতিরিক্ত র‌্যামের প্রয়োজনীয়তা এড়াতে, ব্যাচ বা অফলাইন ডুপ্লিকেশন btrfsব্যবহার করুন (যখনই আপনি এটি প্রয়োজনীয় / প্রয়োজনীয় বিবেচনা করবেন তখন চালান) btrfs.wiki.kernel.org/index.php/Deuاں
মার্সেল ওয়াল্ডভোগেল

3
সাত বছর পরে আপডেট করুন: অবশেষে আমি জেডএফএসে চলে এসে ডুপ্লিকেশন চেষ্টা করলাম - আমি দেখতে পেলাম যে এটির র্যামের প্রয়োজনীয়তা কেবলমাত্র উচ্চ থেকে উচ্চতর ছিল। জেডএফএস স্ন্যাপশটগুলির কৌতুকপূর্ণ ব্যবহারের সমাধানটি আমি ব্যবহার করে শেষ করেছি। (একজন ব্যবহারকারীর সংগীত, স্ন্যাপশট এবং ক্লোন অনুলিপি করুন, rsync --inplaceকেবলমাত্র পরিবর্তিত ব্লকগুলি সংরক্ষণ করে
জোশ

7

আধুনিক লিনাক্সে আজকাল এখানে https://github.com/g2p/bedup রয়েছে যা কোনও বিটিআরএস ফাইল সিস্টেমের অনুলিপি করে, তবে 1) স্ক্যান ওভারহেডের বেশি ছাড়াই, 2) ফাইলগুলি পরে সহজেই আবার ডাইভারেজ করতে পারে।


1
পটভূমি এবং আরও তথ্য বিটিআরএফ.এস.উইকি.কারেল.আর.ইন্ডেক্স.এফপি / অনুচ্ছেদে তালিকাভুক্ত করা হয়েছে (উল্লেখ সহ cp --reflink, নীচেও দেখুন)
মার্সেল ওয়াল্ডভোগেল

5

সদৃশ ফাইলগুলি খুঁজতে আপনি ডাফ ব্যবহার করতে পারেন ।

প্রদত্ত ফাইলগুলির সেটগুলিতে দ্রুত সদৃশ সন্ধানের জন্য ডাফ একটি ইউনিক্স কমান্ড-লাইন ইউটিলিটি।

সহজভাবে চালান:

duff -r target-folder

ঐ ফাইল automaticly করার hardlinks তৈরি করতে হলে, আউটপুট পার্স করতে হবে ডাফের সঙ্গে ব্যাশ অথবা অন্য কোনো স্ক্রিপ্টিং ভাষা।


সত্যিই ধীর যদিও - দেখুন rdfind.pauldreik.se/#g0.6
ndemou

5
aptitude show hardlink

বর্ণনা: হার্ডলিংক একই ফাইলের একাধিক অনুলিপি হার্ডলিংক এমন একটি সরঞ্জাম যা একই ফাইলের একাধিক অনুলিপি সনাক্ত করে এবং হার্ডলিঙ্কগুলি দিয়ে তাদের প্রতিস্থাপন করে।

ধারণাটি http://code.google.com/p/hardlinkpy/ থেকে নেওয়া হয়েছে , তবে কোডটি স্ক্র্যাচ থেকে লেখা হয়েছে এবং এমআইটি লাইসেন্সের আওতায় লাইসেন্সযুক্ত। হোমপৃষ্ঠা: http://jak-linux.org/projects/hardlink/


এখানে উল্লিখিত একমাত্র প্রোগ্রামটি জেন্টোর জন্য আনমস্কিং ছাড়াই এবং হার্ডলিঙ্ক সমর্থন সহ উপলভ্য, ধন্যবাদ!
জোরিট স্কিপার্স

4

আমি এখানে উল্লিখিত লিনাক্সের জন্য অনেকগুলি হার্ডলিঙ্কিং সরঞ্জাম ব্যবহার করেছি। আমি খুব, ext4 এই FS সঙ্গে আটকে করছি উবুন্টু উপর, এবং তার ব্যবহার করা হয়েছে সিপি -l এবং -s হার্ড / softlinking জন্য। কিন্তু ইদানীং খেয়াল লাইটওয়েট কপি মধ্যে CP man পৃষ্ঠা, যা অপ্রয়োজনীয় ডিস্ক স্থান অনাবশ্যক সূচিত করা হবে যতক্ষণ না এক দিকে পরিবর্তিত পরার:

   --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
এটি বিটিআরএফ এবং ওসিএফএস 2 এ সমর্থিত। অনুলিপি ফাইল সিস্টেমগুলিতে এটি কেবল সম্ভব, যা ext4 নয়। বিটিআরএফস সত্যিই আকার নিচ্ছে। আমি রিফ্লিংক এবং স্ন্যাপশটের কারণে এটি ব্যবহার করতে পছন্দ করি, ফাইলের বড় গাছগুলিতে ভর অপারেশন করতে আপনাকে কম ভয় পায়।
ক্লেক

3

আমার কাছে মনে হয় ফাইলের নামটি পরীক্ষা করা আগে জিনিসগুলিকে গতিময় করতে পারে। যদি দুটি ফাইলের ফাইলের একই ফাইলের অভাব থাকে তবে অনেক ক্ষেত্রে আমি সেগুলি সদৃশ হিসাবে বিবেচনা করব না। দেখে মনে হচ্ছে দ্রুততম পদ্ধতিটি তুলনা করা হবে, যাতে:

  • ফাইলের নাম
  • আয়তন
  • এমডি 5 চেকসাম
  • বাইট বিষয়বস্তু

কোনও পদ্ধতি কি এটি করে? তাকান duff, fdupes, rmlint, fslint, ইত্যাদি

নিম্নলিখিত পদ্ধতিটি কমান্ডলাইনফু.কম -এ শীর্ষে ভোট দেওয়া হয়েছিল : সদৃশ ফাইলগুলি সন্ধান করুন (প্রথমে আকারের উপর ভিত্তি করে, তারপরে 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, এবং দৃ strongly়ভাবে পাঠকদের এগুলির মধ্যে তৃতীয়টি দেখার পরামর্শ দিই । এটিতে একটি দুর্দান্ত বিকল্প সেট (এবং ডকুমেন্টেশন) রয়েছে। এটির সাহায্যে, অন্যান্য সরঞ্জামগুলির সাহায্যে আমার প্রয়োজনীয় পোস্ট প্রসেসিংয়ের প্রচুর পরিমাণে এড়াতে সক্ষম হয়েছি।
সন্দেহজনক জিম

3
আমার অনুশীলনে ফাইলের নাম হ'ল সর্বনিম্ন নির্ভরযোগ্য ফ্যাক্টর এবং আমি ডি-ডুপিংয়ের যে কোনও প্রচেষ্টা থেকে আমি এটি সম্পূর্ণরূপে সরিয়ে ফেলেছি। install.shএকটি সক্রিয় সিস্টেমে কতগুলি ফাইল পাওয়া যায়? আমি কোনও ফাইল সংরক্ষণ করেছি এবং নাম সংঘর্ষ করেছি, সেটিকে সংরক্ষণের জন্য কয়েকজন অন-দ্য ফ্লাইটের নাম বদলেছে তার সংখ্যা আমি গণনা করতে পারি না। ফ্লিপ সাইড: বিভিন্ন দিনে আমি বিভিন্ন উত্স থেকে কতবার কিছু ডাউনলোড করেছি সে সম্পর্কে কোনও ধারণা নেই, কেবল আলাদা নাম সহ তারা একই ফাইল find (যা টাইমস্ট্যাম্পের নির্ভরযোগ্যতাটিকেও হত্যা করে)) 1: আকার, 2: ডাইজেস্ট, 3: বাইট সামগ্রীগুলি।
জিপসি বানানটি

@ জিপসিস্পিল ওয়েইভার: (1) ব্যক্তিগত ব্যবহারের ক্ষেত্রে নির্ভর করে, আপনি কি রাজি হবেন না? আমার ক্ষেত্রে, আমার একাধিক ব্যাকআপ থেকে একাধিক পুনরুদ্ধার রয়েছে, যেখানে একই নাম এবং সামগ্রীযুক্ত ফাইলগুলি বিভিন্ন পুনরুদ্ধার-ফোল্ডারে উপস্থিত রয়েছে। (২) আপনার মন্তব্যটি কেবল ফাইলের সাথে তুলনা করে ধরেছে বলে মনে হচ্ছে । আমি অন্য চেকগুলি মুছে ফেলার পরামর্শ দিচ্ছিলাম না।
জোনি কেন 21 '50

2

যেহেতু আমি পার্লের অনুরাগী নই, এখানে একটি বাশ সংস্করণ রয়েছে:

#!/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

এটি একই ফাইলের চেকসামের সাথে সমস্ত ফাইল সন্ধান করে (সেগুলি বড়, ছোট বা ইতিমধ্যে হার্ডলিঙ্কগুলিই হোক) এবং সেগুলিকে একত্রে লিঙ্কযুক্ত।

অতিরিক্ত সন্ধানের পতাকা (উদাহরণস্বরূপ আকার) এবং একটি ফাইল ক্যাশে (যা আপনাকে প্রতিবার চেকসামগুলি পুনরায় করতে হবে না) দিয়ে বার বার রান করার জন্য এটি ব্যাপকভাবে অনুকূল করা যেতে পারে। কারও যদি স্মার্ট, দীর্ঘ সংস্করণে আগ্রহী হয় তবে আমি এটি পোস্ট করতে পারি।

দ্রষ্টব্য: যেমনটি আগেই উল্লেখ করা হয়েছে, হার্ডলিঙ্কগুলি ততক্ষণ কাজ করে যতক্ষণ না ফাইলগুলির কখনই পরিবর্তনের প্রয়োজন হয় না বা ফাইল সিস্টেমগুলিতে সরানো হয়।


আমি কীভাবে আপনার স্ক্রিপ্টটি পরিবর্তন করতে পারি, যাতে এটি হার্ডলিঙ্ক করার পরিবর্তে এটি কেবল সদৃশ ফাইলগুলি মুছে ফেলবে এবং মুছে ফেলা ফাইলটি>> লাইনযুক্ত ফাইলের সিএসভি ফাইলে একটি এন্ট্রি যুক্ত করবে। । ???
মিঃ.গুভা

অবশ্যই। হার্ড লিঙ্ক লাইন: প্রতিধ্বনি ln -f "$ ওল্ডফিল" "$ NEWFILE" কেবলমাত্র একটি হার্ড লিঙ্কের সাথে সদৃশ ফাইলটি প্রতিস্থাপন করে, আপনি পরিবর্তে এটি $ NEWFILE আরএম পরিবর্তন করতে পারেন।
seren

এবং পরের লাইনে কীভাবে কোনও পাঠ্য ফাইলে লিখুন কোনওভাবে $ ওল্ডফিল -> নিউফিল ???
মিঃ.গুভা

আহ, ঠিক আছে। হ্যাঁ, যেমন RM পর একটি লাইন যোগ করুন: প্রতিধ্বনি "$ NEWFILE" >> /var/log/deleted_duplicate_files.log
seren

2
চক্রটিকে পুনরায় উদ্ভাবন করবেন না। আরও পরিপক্ক সমাধান উপলব্ধ আছে যেমন rdfind, যা দেশী গতিতে কাজ করে এবং কেবল প্রয়োজন brew install rdfindবা apt-get install rdfindইনস্টল করা দরকার।
ওলিগোফ্রেন

1

আমি একটি পার্ল স্ক্রিপ্ট তৈরি করেছি যা আপনি যা বলছেন তার অনুরূপ কিছু করে:

http://pastebin.com/U7mFHZU7

মূলত, এটি কেবল একটি ডিরেক্টরিকে অনুসরণ করে, এতে থাকা ফাইলগুলির SHA1sum গণনা করে, এটি হ্যাশ করে এবং ম্যাচগুলিকে একত্রে লিঙ্ক করে। এটি অনেক, অনেক উপলক্ষে কাজে আসে।


2
আমি শীঘ্রই এটিকে চেষ্টা করে দেখার আশ্বাস পাচ্ছি ... কেন এটি
সিপিএএন-

2
@ এক্সেনোটেরাকাইড: ইতিমধ্যে বিদ্যমান সমস্ত অনুরূপ এবং আরও পরিপক্ক সমাধানের কারণে। অন্যান্য উত্তরগুলি দেখুন, বিশেষত rdfind।
অলিগোফ্রেন 3'15

1
@oligofren আমি এর থেকে আরও ভাল সমাধানের সন্দেহ নেই। TMTOWTDI আমার ধারণা।
অ্যাম্ফেটামাইচেন

1

আপনি যদি ম্যাক বা কোনও ইউএনআইএক্স ভিত্তিক সিস্টেমে হার্ড লিঙ্কগুলির দ্বারা সদৃশগুলি প্রতিস্থাপন করতে চান তবে আপনি এটি বিকাশ করে স্মার্টডাপ http://sourceforge.net/ प्रोजेक्टস / স্মার্টডুপ / চেষ্টা করতে পারেন


3
আপনি কীভাবে "স্মার্ট" তা প্রসারিত করতে পারেন?
স্টাফেন গিমেনেজ

1
আমি দুটি ভিন্ন ডিরেক্টরি ফাইলের তুলনা করতে পারি?
বুর্কার্ডো

1

অ্যাপ্লিকেশনগুলি এফএসলিন্ট ( http://www.pixelbeat.org/fslint/ ) যে কোনও ফোল্ডারে (সামগ্রীতে) সমস্ত সমতুল্য ফাইল খুঁজে পেতে এবং হার্ডলিঙ্ক তৈরি করতে পারে। একবার চেষ্টা করে দেখো!

জর্হে সাম্পাও


এটি প্রায় সম্পূর্ণ এক্স 3 হার্ডডিস্ক স্ক্যান করে 1 টিবি স্তব্ধ করে, পুরো সিস্টেমকে একটি ক্রল এনে দেয়। "অনুসন্ধান" এর 14 ঘন্টা পরে বাতিল করা হয়েছে
অ্যাঙ্গসুমান চক্রবর্তী

1

jdupes একটি মন্তব্যে উল্লেখ করা হয়েছে তবে এটির নিজস্ব উত্তর প্রাপ্য, যেহেতু এটি সম্ভবত বেশিরভাগ বিতরণে পাওয়া যায় এবং বেশ দ্রুত চালিত হয় (এটি মাত্র এক মিনিটে 98% পূর্ণ 158 গিগাবাইট পার্টিশন (এসএসডি ড্রাইভ) এর 2.7 গিগাবাইট মুক্ত করেছে):

jdupes -rL /foo/bar

0

আপনি যদি হার্ডলিঙ্কগুলি করেন তবে সেই ফাইলের অধিকারগুলিতে মনোযোগ দিন। নোটিশ, মালিক, গোষ্ঠী, মোড, বর্ধিত বৈশিষ্ট্য, সময় এবং এসিএল (যদি আপনি এটি ব্যবহার করেন) ইনোডে সঞ্চিত থাকে। কেবল ফাইলের নামই আলাদা হয় কারণ এটি ডিরেক্টরি কাঠামোতে এবং অন্য পয়েন্টগুলিতে আইএনওডি বৈশিষ্ট্যগুলিতে সংরক্ষিত। এই কারণ হিসাবে একই ফাইলের সাথে যুক্ত সমস্ত ফাইলের নামের একই অ্যাক্সেসের অধিকার রয়েছে। আপনার সেই ফাইলটি পরিবর্তন হওয়া রোধ করা উচিত, কারণ যে কোনও ব্যবহারকারী ফাইলের অন্যটির ক্ষতি করতে পারে। এটা সহজ. এটি যথেষ্ট, কোনও ব্যবহারকারী একই নামে অন্য ফাইলটি রাখেন। এরপরে ইনোড নম্বরটি সংরক্ষণ করা হবে এবং সমস্ত হার্ডলিঙ্কযুক্ত নামের জন্য মূল ফাইল সামগ্রীটি (প্রতিস্থাপন) নষ্ট হয়ে যাবে।

ফাইল সিস্টেমের স্তরের প্রতিলিপি হ'ল আরও ভাল উপায়। আপনি বিটিআরএফএস (শেষ বার খুব জনপ্রিয়), ওসিএফএস বা এটি ব্যবহার করতে পারেন। পৃষ্ঠাটি দেখুন: https://en.wikedia.org/wiki/Compistance_of_file_systems , টেবিলের বিশেষত্ব বৈশিষ্ট্য এবং কলামের ডেটা প্রতিলিপি। আপনি এটি ক্লিক করুন এবং বাছাই করতে পারেন :)

জেডএফএস ফাইল সিস্টেমটি বিশেষভাবে দেখুন। এটি ফুস হিসাবে উপলব্ধ, তবে এইভাবে এটি খুব ধীর slow আপনি যদি দেশীয় সমর্থন চান তবে http://zfsonlinux.org/ পৃষ্ঠাটি দেখুন । তারপরে আপনাকে অবশ্যই কার্নেলটি প্যাচ করতে হবে এবং ম্যানেজমেন্টের জন্য zfs সরঞ্জাম ইনস্টল করতে হবে। আমি বুঝতে পারছি না, কেন লিনাক্স ড্রাইভার হিসাবে সমর্থন করে না, এটি অন্যান্য অনেক অপারেটিং সিস্টেম / কার্নেলের জন্য উপায়।

ফাইল সিস্টেমগুলি 2 উপায়ে, অনুলিপি ফাইল বা ব্লকগুলি দ্বারা অনুলিপি সমর্থন করে। জেডএফএস ব্লক সমর্থন করে। এর অর্থ, একই ফন্টে পুনরাবৃত্তি করা একই সামগ্রীগুলি নকল করা যেতে পারে। অন্য উপায়ে এমন সময় হয় যখন ডেটা নকল হয়, এটি অনলাইনে (জেডএফএস) বা অফলাইনে (বিটিআরএফএস) হতে পারে।

লক্ষ্য করুন, প্রতিলিপি র‌্যাম গ্রহণ করে। এটি কেন জেডএফএস ভলিউমে ফাইল লেখার FUSE এর সাথে মাউন্ট করা, নাটকীয়ভাবে ধীর পারফরম্যান্সের কারণ ঘটায়। এটি ডকুমেন্টেশনে বর্ণিত হয়েছে। তবে আপনি অনলাইনে ভলিউমে ডিপ্লিকেশন অন / অফ সেট করতে পারেন। যদি আপনি দেখতে পান যে কোনও ডেটা নকল করা উচিত, আপনি কেবল অনুলিপি সেট করেছেন, কোনও ফাইলকে কোনও অস্থায়ীতে পুনরায় লিখুন এবং শেষ পর্যন্ত প্রতিস্থাপন করুন। এটির পরে আপনি অনুলিপি বন্ধ করতে পারেন এবং সম্পূর্ণ কার্য সম্পাদন করতে পারেন। অবশ্যই, আপনি কোনও ক্যাশে ডিস্ক স্টোরেজ যুক্ত করতে পারেন। এটি খুব দ্রুত ঘোরানো ডিস্ক বা এসএসডি ডিস্ক হতে পারে। অবশ্যই এটি খুব ছোট ডিস্ক হতে পারে। আসল কাজে এটি র্যামের প্রতিস্থাপন :)

লিনাক্সের অধীনে আপনার জেডএফএসের যত্ন নেওয়া উচিত কারণ সমস্ত ফাইল যেমনটি যেমন করা ঠিক তেমন কাজ করে না, বিশেষত আপনি যখন ফাইল সিস্টেম পরিচালনা করেন, স্ন্যাপশট তৈরি করেন ইত্যাদি। তবে আপনি যদি কনফিগারেশন করেন এবং এটি পরিবর্তন করেন না, সমস্ত সঠিকভাবে কাজ করে। অন্য উপায়ে, আপনার লিনাক্সকে ওপেনসোলারিসে পরিবর্তন করা উচিত, এটি জেডএফএসকে স্থানীয়ভাবে সমর্থন করে :) জেডএফএসের সাথে যা খুব সুন্দর তা হ'ল এটি ফাইল সিস্টেম এবং এলভিএম-এর অনুরূপ ভলিউমেন ম্যানেজার হিসাবে কাজ করে। আপনি যখন জেডএফএস ব্যবহার করেন তখন আপনার প্রয়োজন হবে না। আপনি আরও জানতে চাইলে ডকুমেন্টেশন দেখুন।

জেডএফএস এবং বিটিআরএফএসের মধ্যে পার্থক্য লক্ষ্য করুন। জেডএফএস বয়স্ক এবং আরও পরিপক্ক, দুর্ভাগ্যক্রমে কেবল সোলারিস এবং ওপেনসোলারিসের অধীনে (দুর্ভাগ্যক্রমে ওরাকল দ্বারা শ্বাসরোধে হত্যা করা হয়েছে)। বিটিআরএফএস আরও কম বয়সী তবে শেষবারের মতো খুব ভাল সমর্থিত। আমি তাজা কার্নেল সুপারিশ। জেডএফএসের অনলাইন প্রতিলিপি রয়েছে, যার ফলে ধীরগতিতে লেখাগুলি আসে, কারণ সমস্তই অনলাইন গণনা করা হয়। বিটিআরএফএস অফ-লাইন ছাড়ের সমর্থন করে। তারপরে এটি পারফরম্যান্স সংরক্ষণ করে, কিন্তু হোস্টের যখন কিছুই করার থাকে না, আপনি সময় সময় সময় প্রতিলিপি তৈরির জন্য চালনা করেন। এবং বিটিআরএফএস স্থানীয়ভাবে লিনাক্সের অধীনে তৈরি করা হয়। হতে পারে এটি আপনার জন্য আরও ভাল এফএস :)


1
আমি অফলাইনে (বা ব্যাচ ) ডুপ্লিকেশন পদ্ধতির মতই করি btrfs। অপশন (সহ চমৎকার আলোচনা cp --reflinkবিকল্প) এখানে: btrfs.wiki.kernel.org/index.php/Deduplication
মার্সেল Waldvogel

জেডএফএস কেবল সোলারিস বা ওপেনসোলারিস নয়। এটি মূলত ফ্রিবিএসডি-তে সমর্থিত। এছাড়াও, লিনাক্সে জেডএফএস হল ডিভাইস ড্রাইভার ভিত্তিক; FUSE এ জেডএফএস একটি আলাদা জিনিস।
কেজে সিফ্রিড

0

হার্ড লিঙ্কগুলি সেরা ধারণা নাও হতে পারে; যদি কোনও ব্যবহারকারী ফাইল পরিবর্তন করে তবে তা উভয়কেই প্রভাবিত করে। তবে, একটি হার্ড লিঙ্ক মুছে ফেলা উভয় ফাইল মুছবে না। এছাড়াও, হার্ড লিঙ্কগুলি একই ফাইলের একাধিক অনুলিপি হিসাবে (হার্ড ডিস্কে, ওএস নয়) একই পরিমাণে স্থান গ্রহণ করে কিনা আমি পুরোপুরি নিশ্চিত নই; উইন্ডোজ অনুসারে (লিঙ্ক শেল এক্সটেনশন সহ) তারা করে। মঞ্জুর, এটি উইন্ডোজ, ইউনিক্স নয় ...

আমার সমাধানটি হ'ল কোনও লুকানো ফোল্ডারে একটি "সাধারণ" ফাইল তৈরি করা এবং প্রতীকী লিঙ্কগুলির সাথে প্রকৃত নকলগুলি প্রতিস্থাপন করা হবে ... তারপরে, প্রতীকী লিঙ্কগুলি মেটাডেটা বা বিকল্প ফাইল স্ট্রিমের সাথে এম্বেড করা হবে যা কেবল দুটি "ফাইল" রেকর্ড করে একে অপরের থেকে পৃথক, যেমন যদি কোনও ব্যক্তি ফাইলের নাম পরিবর্তন করতে বা কাস্টম অ্যালবাম আর্ট বা এর মতো অন্য কিছু যুক্ত করতে চায়; এটি একইভাবে একই গেমের একাধিক সংস্করণ বা সফ্টওয়্যার ইনস্টল করা এবং এমনকি স্বল্পতম পার্থক্য সহ স্বতন্ত্রভাবে তাদের পরীক্ষা করার মতো ডাটাবেস অ্যাপ্লিকেশনের বাইরেও কার্যকর হতে পারে।


0

সবচেয়ে সহজ উপায় হ'ল বিশেষ প্রোগ্রাম দুপগুরু ব্যবহার করা

গুরুর পছন্দসমূহের স্ক্রিনশট

ডকুমেন্টেশন হিসাবে বলে

মুছে ফেলা বিকল্প

এই বিকল্পগুলি কীভাবে সদৃশ মোছা স্থান নেয় তা প্রভাবিত করে। বেশিরভাগ সময়, আপনার এগুলির কোনও সক্ষম করার দরকার নেই।

লিঙ্ক মুছে ফেলা ফাইল:

মুছে ফেলা ফাইলগুলি রেফারেন্স ফাইলের লিঙ্ক দ্বারা প্রতিস্থাপন করা হয়। আপনার এটি একটি সিমিলিংক বা একটি হার্ডলিঙ্ক দিয়ে প্রতিস্থাপনের পছন্দ আছে। ... একটি সিমিলিংক হ'ল ফাইলের পথের শর্টকাট। যদি মূল ফাইলটি মোছা বা সরানো হয় তবে লিঙ্কটি নষ্ট হয়ে গেছে। হার্ডলিঙ্কটি নিজেই ফাইলটির একটি লিঙ্ক। সেই লিঙ্কটি একটি "আসল" ফাইলের মতোই দুর্দান্ত। কোনও ফাইলের সমস্ত হার্ডলিঙ্কগুলি মুছে ফেলা হলে কেবল ফাইলটি নিজেই মোছা হয়।

ওএসএক্স এবং লিনাক্সে, এই বৈশিষ্ট্যটি সম্পূর্ণরূপে সমর্থিত তবে উইন্ডোজ এর অধীনে এটি কিছুটা জটিল। উইন্ডোজ এক্সপি এটি সমর্থন করে না, তবে ভিস্তা এবং এটি সমর্থন করে। তবে বৈশিষ্ট্যটির কাজ করার জন্য, দুপগুরুকে প্রশাসনিক সুযোগ-সুবিধা দিয়ে চালাতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.