দুটি ভিন্ন ডিরেক্টরিতে ভিন্ন ফাইল উপস্থিত files


303

একই ফাইলগুলির তালিকা সহ আমার দুটি ডিরেক্টরি রয়েছে। diffকমান্ডটি ব্যবহার করে উভয় ডিরেক্টরিতে উপস্থিত সমস্ত ফাইলের তুলনা করতে হবে । এটি করার জন্য একটি সহজ কমান্ড লাইন বিকল্প আছে, বা ফাইল তালিকা পেতে আমার কি শেল স্ক্রিপ্ট লিখতে হবে এবং তারপরে পুনরাবৃত্তি করতে হবে?

উত্তর:


422

আপনি diffএটির জন্য কমান্ডটি ব্যবহার করতে পারেন :

diff -bur folder1/ folder2/

এটি একীভূত প্রসঙ্গ সহ ফাঁকা স্থানগুলিকে উপেক্ষা করে এমন একটি পুনরাবৃত্ত ডিফ আউটপুট দেবে:

  • বি পতাকা মানে সাদা স্থান উপেক্ষা করা
  • আপনার পতাকাটির অর্থ একটি সংহত প্রসঙ্গ (3 লাইন আগে এবং পরে)
  • আর পতাকা মানে পুনরাবৃত্তি হওয়া

9
উইন 32 এর জন্য জিএনইউ ইউটিলিটিগুলিdiff ডাউনলোড করে আপনি কমান্ডটিতে অ্যাক্সেস পেতে পারেন ।
লরেন্ট এটিমেবল

7
আমি এটিও খুঁজে পেয়েছি যে - ব্রিফ বিকল্পটি দরকারী; আপনি পরিবর্তিত ফাইলগুলির একটি তালিকা পেয়েছেন এবং এগুলি পৃথকভাবে প্রক্রিয়া করতে পারেন
দরিসজ

27
ভাবছেন অন্যদের জন্য, -bসাদা স্থান পরিবর্তনগুলি উপেক্ষা করে এবং -u3 টি লাইনের বাফার দেয়।
রাত্রের

28
আপনি diff -rub folder1/ folder2/
বারের

11
আমি -burযদি মনে করি আপনি শীতল আবহাওয়াতে বাস করতেন তবে মনে রাখা সহজ হত imagine
AlanH

126

যদি আপনি কেবল সেই ফাইলগুলি দেখতে পৃথক হন তবে আপনি এটি ব্যবহার করতে পারেন:

diff -qr dir_one dir_two | sort

বিকল্প "কিউ" কেবলমাত্র পৃথক পৃথক ফাইলগুলি প্রদর্শন করবে তবে ভিন্ন ভিন্ন সামগ্রীগুলি নয় এবং "সাজান" আউটপুটকে বর্ণানুক্রমিকভাবে সাজাবে arrange


1
বেশ ভালো! এছাড়াও দক্ষতার সাথে কাজ করে - উদাহরণস্বরূপ, যদি একটি সম্পূর্ণ সাব-ডিরেক্টরি কেবল একটি ডায়ারের মধ্যে উপস্থিত থাকে তবে এটির পুনরাবৃত্তি বন্ধ হয়ে যায় এবং কেবলমাত্র সাব-ডিরেক্টরি নিজেই রিপোর্ট করে (এটি উত্তরসূরির বিষয়বস্তু ছাড়াই)। খুব সুন্দর!!
সামথিংসথিং

এটি একটি সত্যই প্রথম পদক্ষেপ: দেখুন, যদি কিছু থাকে তবে তার থেকে পৃথক হয় কি না এবং তারপরে পৃথক পৃথক পৃথক diffদুটি ফাইলের জন্য বিশদ করুন। এক-দু'টি ফাইলের বিপরীতে যদি কয়েক ডজন ফাইলের মধ্যে পার্থক্য থাকে তবে কারওর দৃষ্টিভঙ্গি হিংস্রভাবে আলাদা হবে। আমি diffএকবারে কয়েক ডজন ফাইল আইএনপি থেকে আউটপুট হারিয়ে যেতে পারে !
jvriesem

এছাড়াও -x PATTERNনির্দিষ্ট সাব-ডাইরেক্টরি বাদ দিতে কমান্ড অন্তর্ভুক্ত করতে পারেন । উদাহরণস্বরূপ, diff -qr repo1 repo2 -x ".git"দুটি ডিরেক্টরি (repo1 এবং repo2) তুলনা করা হবে তবে সংশ্লিষ্ট ডিরেক্টরিগুলির .git ফোল্ডারে ফাইলগুলি বাদ দেবে।
ভিআইএফআই

20

ডিফের একটি বিকল্প রয়েছে -rযা কেবল এটি করতে বোঝানো হয়।

diff -r dir1 dir2


11

diffদুটি ফাইলই কেবল তুলনা করতে পারে না, এটি -rবিকল্প ব্যবহার করে পুরো ডিরেক্টরি গাছের হাঁটাচলা করতে পারে, প্রতিটি গাছের তুলনামূলক পয়েন্টগুলিতে সাব-ডাইরেক্টরিগুলি এবং ফাইলগুলির মধ্যে পুনরাবৃত্তভাবে পার্থক্য পরীক্ষা করতে পারে।

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...

3

যদি এটি জিএনইউ থেকে পৃথক হয় তবে আপনি কেবল দুটি ডিরেক্টরিতে এটি নির্দেশ করতে এবং -r বিকল্পটি ব্যবহার করতে সক্ষম হবেন।

অন্যথায়, ব্যবহার করার চেষ্টা করুন

for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done

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

এছাড়াও আমি যুক্ত করতে ভুলে গেছি যে আমি জিএনইউ এলএস-এ আমার অ্যালামের অস্থায়ীভাবে অক্ষম করতে 's ls' করি যাতে আমি জিএনইউ এলএস দ্বারা ফিরে আসা তালিকা থেকে বর্ণ বিন্যাসের তথ্যটি হারাতে পারি।


2
এটি ব্যবহার করার প্রয়োজন নেই ls:for i in ./dir1/*
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
@ ডেনিস, মজার শর্টকাট +1 টি। আমি কমান্ড সাবস্টিটিউশনটি করতে অভ্যস্ত যদিও এটি স্বয়ংক্রিয় এবং আমি কেবল কখনই আমার প্রয়োজন কমান্ডটি ব্যবহার করি, উদাহরণস্বরূপ কখনও কখনও আমি সন্ধান ব্যবহার করি। এলএস ব্যবহার করে আমাকে আরও অধীর তালিকা দিয়ে খেলতে দেয়, যেমন ডিফল্ট ক্রমের পরিবর্তে সময় বিপরীত।
রব ওয়েলস

0

দুটি ফোল্ডারে ফাইলের মধ্যে পার্থক্য দেখানোর জন্য এখানে একটি স্ক্রিপ্ট রয়েছে। এটি পুনরাবৃত্তির সাথে কাজ করে। Dir1 এবং dir2 পরিবর্তন করুন।

(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/}   $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )

0

আপনি যদি বিশেষত ফাইলের সামগ্রীর তুলনা করতে না চান এবং কেবল উভয় ডিরেক্টরিতে কোনটি উপস্থিত নেই তা পরীক্ষা করে দেখতে চান, তবে আপনি অন্য কমান্ড দ্বারা উত্পন্ন ফাইলগুলির তালিকা তুলনা করতে পারেন।

diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'

-printf '%P\n'findরুট ডিরেক্টরি সহ আউটপুট পাথ প্রিফিক্স না করতে বলে ।

sortউভয় কলগুলিতে ফাইলের ক্রম একই হবে তা নিশ্চিত করার জন্য আমি যোগ করেছি find

grepশেষে অভিন্ন ইনপুট লাইন সম্পর্কে তথ্য সরিয়ে ফেলা হয়।


-4

এটা চেষ্টা কর:

diff -rq /path/to/folder1 /path/to/folder2      

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