দুটি ডিরেক্টরি গাছ দেওয়া হয়েছে, কীভাবে আমি ফাইলগুলির বিষয়বস্তু দ্বারা পৃথক হতে পারি তা জানতে পারি?


786

আমি যদি দুটি ডিরেক্টরি গাছের মধ্যে পার্থক্য খুঁজে পেতে চাই তবে আমি সাধারণত কেবল সম্পাদন করি:

diff -r dir1/ dir2/

এটি সম্পর্কিত ফাইলগুলির মধ্যে পার্থক্যগুলি ঠিক কী ফলাফল করে। আমি কেবলমাত্র সম্পর্কিত ফাইলগুলির লিস্ট পেতে আগ্রহী যাঁর বিষয়বস্তু পৃথক। আমি ধরে নিয়েছিলাম যে এটি কেবল কমান্ড লাইন অপশনটি পাস করার বিষয় হবে diffতবে আমি ম্যান পৃষ্ঠায় কিছুই খুঁজে পাইনি।

কোন পরামর্শ?



1
ডিরেক্টরিগুলির একটি সম্পর্কে শ্রদ্ধার সাথে, কেবলমাত্র অন্য ফাইলগুলির মধ্যে অতিরিক্ত যে ফাইল / ডিরেক্টরিগুলি পাবেন?
সন্দীপন নাথ

dircmpইউনিক্সে কমান্ডটি ব্যবহার করুন (লিনাক্স নয়)
রোব্লোগিক

উত্তর:


1118

আপনি লিনাক্স বলেছেন, সুতরাং আপনি ভাগ্য আউট (কমপক্ষে এটি উপলব্ধ হওয়া উচিত, এটি কখন যুক্ত হয়েছিল তা নিশ্চিত নয়):

diff --brief --recursive dir1/ dir2/ # GNU long options
diff -qr dir1/ dir2/ # common short options

আপনার যা প্রয়োজন তা করা উচিত।

আপনি যদি ফাইলগুলির মধ্যে পার্থক্য দেখতে চান যা কোনও ডিরেক্টরিতে নাও থাকতে পারে:

diff --brief --recursive --new-file dir1/ dir2/ # GNU long options
diff -qrN dir1/ dir2/ # common short options

12
খুশী হলাম। তবে সংক্ষিপ্ততর diff -qr dir1/ dir2/এবং আমার বর্ধিত সংস্করণটিdiff -qr dir1/ dir2/ | grep ' differ'
sobi3ch

1
@ এসএসভি কেন? এটি উত্তর হিসাবে একই কমান্ড। আমি কেবল --briefএটির শর্টকাটে পরিবর্তন করেছি -q
sobi3ch

2
@ এসএসভিভি আসল প্রশ্নটি ঠিক কী জিজ্ঞাসা করেছিল তা নয়, তবে এই প্রশ্নটি সামঞ্জস্য করার জন্য উত্তর আপডেট করে।
মার্ক লোজার

3
@ মাইকম্যাক্সওয়েল এটি হওয়া দরকার --brief। একক বিকল্প হিসাবে নয় পতাকার একটি সেট হিসাবে অন্য কথায় -briefব্যাখ্যা করা হয় -b -r -i -e -f
daboross

2
@ ডাবরোস: বাহ, আমি সময়ের সাথে সাথে ইউনিক্স / লিনাক্স ব্যবহার করে আসছি এবং আমি বুঝতে পারিনি যে '-' এবং '-' এর মধ্যে তফাত রয়েছে। (আমি মনে করি না '-' শুরু করার সাথে সাথেই অস্তিত্ব ছিল)) ব্যাখ্যাটির জন্য ধন্যবাদ!
মাইক ম্যাক্সওয়েল

287

আমি যে আদেশটি ব্যবহার করি তা হ'ল:

diff -qr dir1/ dir2/

এটি মার্কের মতো হ'ল) ​​তবে তার উত্তরটি আমাকে বিরক্ত করেছিল কারণ এটি বিভিন্ন ধরণের পতাকা ব্যবহার করে এবং এটি আমাকে দু'বার চেহারায় পরিণত করে। মার্কের আরও ভার্বোজ পতাকা ব্যবহার করে এটি হবে:

diff  --brief --recursive dir1/ dir2/

যখন অন্য উত্তরটি পুরোপুরি গ্রহণযোগ্য হয় তখন আমি পোস্ট করার জন্য ক্ষমাপ্রার্থী। নিজেকে থামাতে পারিনি ... কম পেডেন্টিক হওয়ার কারণে কাজ করছি।


3
সম্পূর্ণরূপে ধারাবাহিকতার প্রশংসা করুন - তবে খারাপ লাগবেন না; আমি মার্কের
উত্তরটিকেও উজ্জীবিত

10
.. সুতরাং এটি বোঝাতে কি আপনি জাস্টের সাথে আলাদা আলাদা উত্তর রেখেছেন? আইএমএইচও না! এটি কি বোধগম্য হয় যে আপনি উভয় উত্তরকে একটি ধারাবাহিক উত্তরের সাথে একত্রিত করেছেন? হ্যাঁ! ;)
sobi3ch

1
শুধু একটা প্রশ্ন; কী qদাঁড়ায়? এটি কি কোনও কিছুর সংক্ষেপণ? আমি q.. এর পিছনে কোনও যুক্তি খুঁজে পাচ্ছি না
kramer65

3
@ kramer65 - এটি "- ব্রিফ" এর সমান, তবে আমার ধারণা আপনি কেন অবাক হন? সম্ভবত দ্রুত জন্য? ম্যান পৃষ্ঠা অনুসারে "সাদা জায়গার পরিমাণে পরিবর্তনগুলি উপেক্ষা করুন" দ্বারা "-বি" নেওয়া হয়েছে।
এফপিসি

3
@ kramer65 আমি বিশ্বাস করি এর qজন্য quiet, সাধারণত অর্থ কম শব্দকোষ ।
Gogeta70

105

আমি ব্যবহার করতে চাই git diff --no-index dir1/ dir2/, কারণ এটি রঙের পার্থক্যগুলি প্রদর্শন করতে পারে (যদি আপনার গিট কনফিগারেশনে এই বিকল্পটি সেট করা থাকে) এবং কারণ এটি "কম" ব্যবহার করে দীর্ঘ পৃষ্ঠাযুক্ত আউটপুটে সমস্ত পার্থক্য দেখায়।


25
ঝরঝরে। কে অনুমান করতে পারে যে গিটটি কেবল তার ফাইলগুলির বিরুদ্ধে রেপো নয়, স্বেচ্ছাসেবী ডিরেক্টরিগুলি পৃথক করতে পারে?
ড্যান ড্যাসকলেসকু 6:34

2
পার্ল স্ক্রিপ্ট কলর্ডিফ এখানে খুব দরকারী, এসএনএন এবং সাধারণ ডিফের সাথে ব্যবহার করা যেতে পারে।
ফিলিপ আলভারেজ

4
যদি আপনি 2 টি ডায়ারকে আলাদা গিট প্রকল্প / রেপো হিসাবে তুলনা করেন তবে আপনার স্ট্যাকওভারফ্লো . com /a/1792477/473390 এ --no-indexআরও যুক্ত করা দরকার । আমি @ অ্যালান-পোর্টার উত্তর আপডেট করেছি।
sobi3ch

আমি এটি পছন্দ করি, আমি এটিও দেখতে পেয়েছি যে আপনি যদি --name-status কমান্ড লাইনে যুক্ত হন তবে এটি পরিবর্তিত / যুক্ত / মোছা স্থিতির জন্য "এম / এ / ডি" পতাকা সহ ফাইলের নাম তালিকা প্রদর্শন করবে।
জিজেডে

এটি ঘটে যাতে উভয় ডিরেক্টরিই আসলে .git ফোল্ডার ধারণ করে, আমি কীভাবে এটি তুলনা থেকে বাদ দিতে পারি?
মুহাম্মদ সিকাক

35

এই দুটি কমান্ড মূলত যা চাওয়া হয়েছে তা করে:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

তাদের মধ্যে পছন্দটি dir1 এবং dir2 এর অবস্থানের উপর নির্ভর করে:

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

rsync আসলে তুলনা করার আগে বড় অংশগুলিতে চেকসামগুলি গণনা করে। এটি বড় অংশগুলিতে আই / ও অপারেশনগুলিকে গোষ্ঠীভুক্ত করে এবং জিনিসগুলি যখন কোনও একক ড্রাইভে সঞ্চালিত হয় তখন আরও কার্যকর প্রক্রিয়াজাতকরণের দিকে পরিচালিত করে।


3
আরএসআইএনসি কেবলমাত্র একক ড্রাইভে থাকা ফাইলগুলির জন্য দ্রুত নয়, তবে সাবডিয়ারগুলিতে ফাইলগুলির তুলনা করার জন্যও অনুমতি দেয়, উদাহরণস্বরূপ rsync --options /usr /bin /var /sbin /lib /old_rootকার্যকরভাবে বর্তমান /মূলটিকে (এটিতে সমস্ত সাবডিয়ার নির্দিষ্ট করে) এবং /old_root(উদাহরণস্বরূপ কিছু পুরানো ব্যাকআপ ধারণ করে /) তুলনা করা diff -rযেতে পারে যা এমন কিছু করব না এবং যদি আপনি ধরে নেন যে একই আকার, অনুমতি এবং টাইমস্ট্যাম্পগুলির সাথে ফাইলগুলি সম্ভবত পরিবর্তন হয়নি তবে বাইরে চলে যাওয়া --checksumআপনাকে চূড়ান্তভাবে সরবরাহ করবে (যদি না হয় তবে) কোন ফাইলগুলি পরিবর্তিত হতে পারে তা পরীক্ষা করে।
মাতিজা নালিস

1
উদ্দেশ্য কী --deleteদিয়ে rsync?
টম হেল

2
- ডিলিটের উদ্দেশ্য হ'ল গন্তব্য-দিরের বিদ্যমান ফাইলগুলি মুছে ফেলা যা উত্স-দির উপস্থিত নেই (কোনও দিন)
টমাস মুঙ্ক

2
এই ক্ষেত্রে ( --dry-runপতাকা সহ) কিছুই সত্যই মুছে ফেলা হয় না, rsyncকেবল প্রিন্ট করে যে কোন ফাইলগুলি dir1 তে আছে তবে dir2 তে নেই
mata

11
আমি --dry-runদুর্ঘটনাক্রমে এটিকে ভুলে না যাওয়ার জন্য সর্বদা প্রথম রাখার পরামর্শ দিই ।
ডেভ রাগার

22

মাউন্ট দুটি ডিরেক্টরিকে তুলনা করার জন্য একটি দুর্দান্ত সরঞ্জাম:

meld dir1/ dir2/

ফাইল বা ডিরেক্টরিগুলির সাথে তুলনা করার জন্য মেল্ডের অনেকগুলি বিকল্প রয়েছে। দুটি ফাইলের মধ্যে পার্থক্য থাকলে ফাইল তুলনা মোডে প্রবেশ করা এবং সঠিক পার্থক্যগুলি দেখতে সহজ।


2
খুশী হলাম। গাছের সাথে তুলনা করার জন্য আমি একটি সহজ পার্ল স্ক্রিপ্ট লিখেছি তবে আমি সীমাবদ্ধতাগুলি আঘাত করছি। এটি টিকিট বলে মনে হচ্ছে।
ডেভিড টনহোফার

একমাত্র সমস্যা হ'ল এটি গ্রাফিকাল অ্যাপ্লিকেশন হওয়ায় এটি নিজেকে স্ক্রিপ্টিংয়ের জন্য ndণ দেয় না। তবে আপনি জিইউআইয়ের আপত্তি না জানলে এটি দুর্দান্ত! ধন্যবাদ।
ডিনম

আমি দেখতে পাই যে meldযদিও বৃহত্তর ডিরেক্টরিতে ব্যবহৃত হয় তবে তা ভয়াবহভাবে আস্তে আস্তে পরিণত হয়। বড় ডিরেক্টরীগুলি আরও ভাল পরিচালনা করে এমন কি কিছু আছে?
পপআপ

@ পপআপ, আমি জানি না। আপনি এর জাতীয় কিছু সহ পৃথক পৃথক ফাইলের নাম খুঁজে পেতে পারেন, যদিও:find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
আলেকজান্ডার

1
@ আলেকজান্ডার - সেক্ষেত্রে আমি দেখতে পেয়েছি যে meld <(find dir1 -ls ) <(find dir2 -ls)ব্যাশ প্রক্রিয়া বিকল্পটি ব্যবহার করে এটি বেশ ভাল কাজ করে। (zsh এর =(command)কাজ আরও উন্নত))
পপআপ

10

চ্যানেল দেশবাসী 'বিলিংস' (ফ্রেইনোড / # সেন্টোস খ্যাতির) আমার সাথে তার পদ্ধতিটি ভাগ করেছে:

diff -Naur dir1/ dir2

চূড়ান্ত ডিরেক্টরি ফরোয়ার্ড স্ল্যাশ সহ কোনও বিষয় নয়।

এছাড়াও, এটি প্রদর্শিত হয় যে -uবিকল্পটি বিভিন্নের পুরানো / সার্ভারের কয়েকটি সংস্করণে উপলভ্য নয়।

ভিন্নতার মধ্যে পার্থক্য:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

2
সুতরাং এটি --new-file/-Nহ'ল ফাইলগুলি খালি মনে করা এবং --text/-aএর ফলে এটি সমস্ত বাইনারি ইনপুটটিকে পাঠ্য হিসাবে বিবেচনা করে। আমি এই বিশেষ ব্যবহারের ক্ষেত্রে উত্সাহ দেখতে পাচ্ছি না।
phk

4

ডিফোস্কোপ একটি দুর্দান্ত কমান্ড লাইন ভিত্তিক ডিরেক্টরি ডিফ সরঞ্জাম রয়েছে।

আমি বিশেষ করে এটি সম্পর্কে এটি বিবিধতা মতো মধ্যে ফাইলগুলি:

এটি পুনরাবৃত্তভাবে বিভিন্ন ধরণের সংরক্ষণাগারগুলি আনপ্যাক করে এবং বিভিন্ন বাইনারি ফর্ম্যাটগুলিকে তুলনা করার জন্য আরও বেশি মানব পাঠযোগ্য আকারে রূপান্তরিত করে। এটি দুটি টার্বলগুলি, আইএসও চিত্রগুলি বা পিডিএফটিকে কেবল সহজেই তুলনা করতে পারে।

এটি কেবল কোন ফাইলগুলি পৃথক করবে তা আপনাকে জানায় না, তবে এটি কীভাবে পৃথক হয় also


4

ভিন্ন জানতে এই আদেশটি ব্যবহার করুন:

diff -qr dir1/ dir2/

-r সমস্ত উপ-ডিরেক্টরিকেও পৃথক করতে পারে - -কি ফাইলগুলি পৃথক হলে কেবল রিপোর্ট করতে ডিফকে বলে।

diff  --brief dir1/ dir2/

--brief ডিরেক্টরিতে উপস্থিত নেই এমন ফাইলগুলি প্রদর্শন করবে।

অথবা

আমরা গ্রাহকটি ব্যবহার করতে পারি যা গ্রাফিকাল উইন্ডোতে পার্থক্যটি সন্ধান করা সহজ।

meld  dir1/ dir2/

2
--briefএবং -qএকই বিকল্প। আপনার বক্তব্য এটিকে শোনায় যেমন তারা আলাদা তবে তারা তা নয়।
এলিজা লিন

2

আপনি পারেন এছাড়াও ব্যবহার Rsyncএবং find। এর জন্য find:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

তবে একই নাম এবং একই সাবফোল্ডারে ফাইলগুলি, তবে বিভিন্ন সামগ্রী সহ তালিকাগুলিতে প্রদর্শিত হবে না।

আপনি GUI এর একটি পাখা হন, তাহলে আপনি চেক করতে পারেন মেশানো যে @Alexander উল্লেখ করেছে। এটি উভয় উইন্ডো এবং লিনাক্সে কাজ করে works


1

DirA এবং dirB এর মধ্যে পার্থক্যগুলি প্রতিবেদন করার সময় আপডেট / সিঙ্ক করার সময়।

rsync -auv <dirA> <dirB>

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