ব্যাশে, দুটি ফোল্ডারগুলিতে একই সেট ফাইল রয়েছে কিনা তা নিশ্চিত করতে আমি কীভাবে তুলনা করব?


2

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


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

আমি সবেমাত্র পরীক্ষা করেছি। diff -r না এমনকি সাব মধ্যে মধ্যে ধরা ফাইল পরিবর্তন। আপনি বরং ব্যবহার করতে চাইবেন -ur। (আমি আউটপুটটিকে সেভাবে আরও বোধগম্য মনে করি))
jpaugh

উত্তর:


1

আপনি সম্পূর্ণরূপে ভিন্ন নয় এমন কিছু করতে পারেন:

(cd some/where; ls -lR) > somewhere.txt
(cd else/where; ls -lR) > elsewhere.txt
diff somewhere.txt elsewhere.txt

আমি এটি চেষ্টা করে দেখিনি, এটি ফাইল মেটাটাটা (তারিখ ইত্যাদি) সংরক্ষণ করা ( cp -p ...) ও lsএকই ক্রমে ফাইলের নাম বাছাই করার উপর (যা এটি হওয়া উচিত) উপর নির্ভর করে ।


দুঃখিত, কিছু / যেখানে স্বরলিপি আমাকে কিছুটা হারিয়ে ফেলেছে। ডিরেক্টরিগুলির ক্ষেত্রে এটি কী হবে?
জে মিন

someএবং elseএবং whereমাত্র দুই পিতা বা মাতা ফোল্ডার (তাদের সাবডিরেক্টরি তুলনা সহ) তুলনা করতে চান আপেক্ষিক পাথ জন্য প্লেসহোল্ডার হয়। যেমন cd /home/jmin/catpicsএবং cd /home/jmin/copy_of_catpicsবা যাই হোক না কেন
রেডগ্রিটিব্রিক

1

diff --recursive( -r) এমনকি উপ-ডিরেক্টরিতেও ফাইল পরিবর্তন করে catch

আপনি বরং ব্যবহার করতে চাইবেন diff --unified --recursive। এটি একটি ইউনিফাইড ডিফ তৈরি করে , যা অ্যাডিটনের জন্য (+) এবং অপসারণের জন্য (-) সহ উপরিযুক্ত পরিবর্তিত রেখাগুলি প্রদর্শন করে। সুবিধার্থে এটি আশেপাশের লাইনগুলি (অর্থাত্ প্রসঙ্গ ) প্রদর্শন করে , যাতে সেখানে কী চলছে তা আপনি বুঝতে পারেন।


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

এটি চেষ্টা থেকে ফিরে, 3 ঘন্টা পরে আমি আমার সিস্টেমে এলোমেলোভাবে বিস্ফোরণ পেতে শুরু করি। চতুর্থ ঘন্টা নাগাদ আমার পাওয়ার অফ ছাড়া কোন উপায় ছিল না।
জে মিন

হ্যাঁ, আমি বোঝানো diff -u -r। এটা পাগলামি! আপনার তখন এমন একটি সরঞ্জামের প্রয়োজন হতে পারে যা বড় ফাইলসেটগুলির জন্য অনুকূলিত হয়, তারপরে। আরএসএনসি সম্ভবত আপনার সেরা বাজি।
jpaugh

1

যদি rsync একটি কার্যকর বিকল্প হয়, সম্ভবত --itemize-changes(-i) এবং --dry-runবিকল্পগুলি কার্যকর হবে:

rsync -zaic src_dir/ dest_dir/ --dry-run

-z স্থানান্তরকরণের সময় ফাইলগুলি সংকুচিত করে, -আর্কাইভ মোডে একটি অনুলিপি করে এবং -c ফাইলটি চেকসামগুলিতে তারিখ পরিবর্তিত বা আকারের পরিবর্তে তুলনা করে।

-i পৃথক পৃথক ফাইলগুলির তালিকা প্রদর্শন করবে এবং - ড্রাই ড্রাই - মানে কোনও তথ্য স্থানান্তরিত হবে না, কেবল একটি তালিকা তৈরি করা হবে।


এটা কি ব্যবহার? আমার জ্ঞানের জন্য আরএসসিএনকে আবার ফাইলগুলি অনুলিপি করতে হবে।
জে মিন

1
@ জে.মিন - শুকনো-চালিত পতাকা আসলে কিছুই অনুলিপি করে না, কেবল আপনাকে কী ঘটেছে তা দেখায় :)
সিপ্পিবার

1
diff <(cd /first/path/ && find ./ | sort) <(cd /second/path/ && find ./ | sort)

এটি এই অন্যান্য উত্তরের সাথে সমান তবে তবে:

  • আমি findঅবজেক্টের তালিকা তৈরি করতে ব্যবহার করছি (ফাইল, ডিরেক্টরি); এটির চেয়ে এখানে আরও ভাল ফিট করে lsকারণ এর আউটপুটে কেবলমাত্র পাথ রয়েছে।
  • sortপ্রত্যেকটি findতাদের ক্রমে তালিকাবদ্ধ করে নির্বিশেষে অবজেক্টগুলির আপেক্ষিক ক্রম সংরক্ষণ করা নিশ্চিত করে।
  • <(…)সিনট্যাক্স মধ্যে অস্থায়ী ফাইল এড়াতে bash
  • findসংশ্লিষ্ট cdসফল হলে কেবল কার্যকর করা হবে , &&অপারেটরকে ধন্যবাদ । এটি findকোনও ডিরেক্টরিতে টাইপো থাকলে বর্তমান ডিরেক্টরিতে চালানো থেকে রক্ষা করবে ।

অতিরিক্ত নোট:

  • দ্বারা ফিরে আসা পথগুলি আমাদের findডিরেক্টরিগুলির cdসাথে সম্পর্কিত হবে। নিশ্চিত করুন /first/path/এবং /second/path/একে অপরের সাথে সামঞ্জস্য করুন ।
  • diffদুটি ডিরেক্টরি একই থেকে খালি আউটপুট ইঙ্গিত দেয়; কিন্তু মনে রেখ…
  • … কমান্ডটি কেবলমাত্র পাথগুলিতে কাজ করে, এটি লিখিত সামগ্রী বা মেটাডেটা মিলছে কিনা তা পরীক্ষা করে না।
  • অস্বাভাবিক অক্ষরযুক্ত বস্তুর নামগুলি (যেমন নিউলাইনগুলি সহ) যুক্তিটি ভেঙে দেবে।

আপনি কেবলমাত্র 2 টি তালিকার মধ্যে পার্থক্য দেখাতে কেবল sdiff -sবিরোধিতা হিসাবে ব্যবহার করতে পারেন diff, অর্থাত্ যে ফাইলগুলি একটি দিরের এবং অন্যটিতে নয়।
AnythingIsFine
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.