লিনাক্সে কীভাবে বড় ফাইলগুলি পৃথক করা যায়


31

diff: memory exhaustedসেন্টোস 5 এবং 4 গিগাবাইট র‌্যামযুক্ত লিনাক্স বাক্সে মূলত অনুরূপ দুটি 27 জিবি ফাইলের মধ্যে পার্থক্য করার চেষ্টা করার সময় আমি একটি ত্রুটি পেয়েছি । এটি একটি পরিচিত সমস্যা, মনে হয়।

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

  • আমি ব্যবহার করার চেষ্টা করেছি rdiffএবং xdelta, তবে প্যাচের মতো দুটি ফাইলের মধ্যে পরিবর্তনগুলি প্রদর্শন করার জন্য সেগুলি আরও ভাল এবং দুটি ফাইলের মধ্যে পার্থক্য নিরীক্ষণের জন্য এটি দরকারী নয়।
  • ভিবিডিনিফ চেষ্টা করেছেন , তবে এটি একটি চাক্ষুষ সরঞ্জাম যা বাইনারি ফাইলগুলির তুলনা করার জন্য ভাল। আমার এমন কিছু দরকার যা নিয়মিত মত স্টেডউটে পার্থক্যগুলি পাইপ করতে পারে diff
  • অন্যান্য অনেকগুলি ইউটিলিটি রয়েছে যেমন vimdiffকেবলমাত্র ছোট ফাইলগুলির সাথে কাজ করে।
  • আমি সোলারিস সম্পর্কেও পড়েছি bdiffকিন্তু লিনাক্সের জন্য কোনও বন্দর খুঁজে পাইনি।

ফাইলটি ছোট ছোট টুকরো টুকরো করা ছাড়াও কোনও ধারণা? আমার এই ফাইলগুলির মধ্যে 40 টি রয়েছে তাই এগুলি ভেঙে ফেলার কাজটি এড়াতে চাইছে।


এক্সডেল্টার কোন সংস্করণ আপনি চেষ্টা করেছেন? xdelta3 বা xdelta1?
nmuntz

এটি সংস্করণ ছিল 1.1.4। Xdelta3 বিভিন্ন কার্যকারিতা সরবরাহ করে? আমি কেবলমাত্র অনলাইন ডকটি পরীক্ষা করে দেখেছি এবং এটি এখনও "ডেল্টাস" সরবরাহের বিষয়ে বলে মনে হচ্ছে।
টম বি


আরও দেখুন এই উত্তর: unix.stackexchange.com/a/77259/27186
unhammer

উত্তর:


12

cmpবাই বাই বাই জিনিসগুলি করে, তাই এটি সম্ভবত মেমরির বাইরে চলে যাবে না (কেবল এটি দুটি 7 জিবি ফাইলের মধ্যে পরীক্ষা করা হয়েছে) - তবে আপনি "ফাইল এক্স এবং ওয়াই ফাইলের তালিকায় বাইটের চেয়ে পৃথক একটি তালিকা চেয়ে আরও বিশদ অনুসন্ধান করতে পারেন" এক্স , লাইন y "। যদি আপনার ফাইলগুলির মিলগুলি অফসেট হয় (উদাহরণস্বরূপ, ফাইল ওয়াইয়ের পাঠ্যের একটি অভিন্ন ব্লক রয়েছে তবে একই স্থানে নয়), আপনি অফসেটগুলি এতে পাস করতে পারেন cmp; আপনি সম্ভবত এটি একটি ছোট স্ক্রিপ্টের সাথে পুনরায় সংশ্লেষের তুলনায় পরিণত করতে পারেন।

পাশাপাশি: দুটি ডিরেক্টরি স্ট্রাকচার (খুব বড় ফাইলযুক্ত) একরকম: diff --recursive --brief(বা diff -r -qসংক্ষিপ্ত, বা এমনকি এমনকি diff -rq) কাজ করবে এবং স্মৃতিশক্তি ছাড়বে না তা নিশ্চিত করার জন্য কোনও উপায় খুঁজছেন এমন ক্ষেত্রে অন্য কেউ যদি অবতরণ করেন।


সুন্দর, আমি মনে করি -কি এখানে মূল চাবিকাঠি, এটি কোনওরকম না হয়ে পুরো ফাইলটি (বা কমপক্ষে পুরো লাইনগুলি) মেমরিতে রাখার জন্য পৃথক প্রয়োজন হতে পারে ...
রজারডপ্যাক

7

আমি এই লিঙ্কটি খুঁজে পেয়েছি

ডিফ-এইচ সাহায্য করতে পারে, বা আপনি টেক্সটপ্রোক / 2bsd-diff পোর্ট ইনস্টল করার চেষ্টা করতে পারেন যা দৃশ্যত র‌্যামে ফাইলগুলি লোড করার চেষ্টা করে না, তাই এটি আরও বড় ফাইলগুলিতে আরও সহজে কাজ করতে পারে।

আমি নিশ্চিত নই যে আপনি এই দুটি বিকল্প ব্যবহার করে দেখেছেন বা তারা আপনার পক্ষে কাজ করতে পারে। শুভকামনা।


1
এটি কি এখানে কারও পক্ষে সহায়তা করে? আমার জন্য, একই ব্যর্থতা ...
রজারডপ্যাক

12
যে কারও জন্যই ভাবছেন: diff -Hএটি হলেন একটি অননুমোদিত এবং অবহেলিত নাম diff --speed-large-files
a3nm

1
এই উত্তর সাহায্য করবে না। এটি একটি লিনাক্স প্রশ্ন, এবং 2bsd-diff ইনস্টল করতে আপনাকে প্রথমে এটি পোর্ট করতে হবে। আপনি একটি উত্স খুঁজে পাওয়ার পরে । আর এটা patched । সম্ভাব্য, তবে সম্ভাব্য একটি কার্যকর সমাধান।
nyov

1

কয়েকটি বাইট মান বাদে যদি ফাইলগুলি অভিন্ন (একই দৈর্ঘ্যের) হয় তবে আপনি নিম্নলিখিতটির মতো স্ক্রিপ্ট ব্যবহার করতে পারেন ( wহেক্সডাম্পে প্রতি লাইনের বাইট সংখ্যা, আপনার প্রদর্শন প্রস্থের সাথে সামঞ্জস্য করুন):

w=12;
while read -ru7 x && read -ru8 y;
do
  [ ".$x" = ".$y" ] || echo "$x | $y";
done 7< <(od -vw$w -tx1z FILE1) 8< <(od -vw$w -tx1z FILE2) > DIFF-FILE1-FILE2 &

less DIFF-FILE1-FILE2

এটি খুব দ্রুত নয়, তবে কাজটি করে।

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