উত্তর:
ডিফার ম্যান পৃষ্ঠা থেকে:
-q
ফাইলগুলি পৃথক কিনা তা কেবল রিপোর্ট করুন, পার্থক্যের বিশদ নয়।
-r
ডিরেক্টরিগুলির সাথে তুলনা করার সময়, খুঁজে পাওয়া কোনও সাব-ডিরেক্টরিকে পুনরাবৃত্তভাবে তুলনা করুন।
উদাহরণ কমান্ড:
diff -qr dir1 dir2
উদাহরণ আউটপুট (স্থানীয় উপর নির্ভর করে):
$ ls dir1 dir2
dir1:
same-file different only-1
dir2:
same-file different only-2
$ diff -qr dir1 dir2
Files dir1/different and dir2/different differ
Only in dir1: only-1
Only in dir2: only-2
-x PATTERN
নির্দিষ্ট সাব-ডাইরেক্টরি বাদ দিতে কমান্ড অন্তর্ভুক্ত করতে পারেন । উদাহরণস্বরূপ, diff -qr repo1 repo2 -x ".git"
দুটি ডিরেক্টরি তুলনা করে তবে সেগুলিতে ".git" দিয়ে ফাইলের পথ বাদ দেবে।
আপনি rsync ব্যবহার করতে পারেন
rsync -rv --size-only --dry-run /my/source/ /my/dest/ > diff.out
--size-only
অভিন্ন আকারের ফাইলগুলি, তবে বিভিন্ন সামগ্রীর জন্য মিস করবে, যেমন পুরানো / সংস্করণ t txt "29a" new / version.txt "29b" । পরিবর্তে ব্যবহার করুন: rsync -ric --dry-run old/ new/
যেখানে "-i" যুক্তি সরাসরি ফাইল তালিকা পেতে অনুমতি দেয়rsync -ric --dry-run old/ new/ | cut -d" " -f 2
আপনি যদি কেবল একটি ডিরেক্টরিতে থাকা ফাইলের একটি তালিকা পেতে চান তবে তাদের সাব ডিরেক্টরিগুলি এবং কেবল তাদের ফাইলের নাম নয়:
diff -q /dir1 /dir2 | grep /dir1 | grep -E "^Only in*" | sed -n 's/[^:]*: //p'
আপনি যদি পুরো ফাইলগুলির সাথে পৃথক সমস্ত ফাইল এবং ডিরেক্টরিগুলি পুনরাবৃত্তভাবে তালিকাবদ্ধ করতে চান:
diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}'
এইভাবে আপনি সমস্ত ফাইলে বিভিন্ন কমান্ড প্রয়োগ করতে পারেন।
উদাহরণস্বরূপ, আমি dir1 তে থাকা সমস্ত ফাইল এবং ডিরেক্টরিগুলি সরিয়ে ফেলতে পারতাম তবে dir2 তে না:
diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}' xargs -I {} rm -r {}
আমার লিনাক্স সিস্টেমে কেবল ফাইলের নাম পেতে
diff -q /dir1 /dir2|cut -f2 -d' '
audit-0.0.234/audit-data-warehouse-0.0.234/ audit-0.0.235/audit-data-warehouse-0.0.235/
diff -qrN /dir1 /dir2 | cut -f2 -d' '
আমার জন্য কাজ করে!
চলমান পদ্ধতির diff -qr old/ new/
একটি বড় অসুবিধা রয়েছে: এটি সদ্য নির্মিত ডিরেক্টরিগুলিতে ফাইলগুলি মিস করতে পারে। উদাহরণস্বরূপ, ফাইলটি নীচের উদাহরণের মধ্যে ডিরেক্টরিটি যেখানে রয়েছে তার data/pages/playground/playground.txt
আউটপুটটিতে নেই ( দ্রুত তুলনা করার জন্য আপনার ব্রাউজারে playground.txt অনুসন্ধান করুন)। আমি ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জে নিম্নলিখিত সমাধান পোস্ট করেছিdiff -qr old/ new/
data/pages/playground/
, তবে আমি এটি এখানে অনুলিপি করব:
প্রোগ্রামযুক্তভাবে নতুন বা সংশোধিত ফাইলগুলির একটি তালিকা তৈরি করার জন্য আমি আসার সেরা সমাধানটি হ'ল আরএসইএনসি , সাজানো এবং ইউনিক ব্যবহার :
(rsync -rcn --out-format="%n" old/ new/ && rsync -rcn --out-format="%n" new/ old/) | sort | uniq
এই উদাহরণটি দিয়ে আমাকে ব্যাখ্যা করতে দাও: কোন ফাইলগুলি পরিবর্তন করা হয়েছিল এবং কোনটি নতুন তৈরি হয়েছিল তা দেখতে আমরা দুটি ডকউইকি প্রকাশের সাথে তুলনা করতে চাই।
আমরা উইজেট সহ টারগুলি আনা এবং সেগুলি ডিরেক্টরিগুলিতে বের করি old/
এবং new/
:
wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-2014-09-29d.tgz
wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-2014-09-29.tgz
mkdir old && tar xzf dokuwiki-2014-09-29.tgz -C old --strip-components=1
mkdir new && tar xzf dokuwiki-2014-09-29d.tgz -C new --strip-components=1
আরএসসিএনকে একপথে চালানো এখানে নতুন তৈরি ফাইলগুলি আরএসইএনসি এবং ডিফের শোগুলির তুলনা হিসাবে মিস করতে পারে:
rsync -rcn --out-format="%n" old/ new/
নিম্নলিখিত আউটপুট ফলন:
VERSION
doku.php
conf/mime.conf
inc/auth.php
inc/lang/no/lang.php
lib/plugins/acl/remote.php
lib/plugins/authplain/auth.php
lib/plugins/usermanager/admin.php
কেবলমাত্র এক দিকে চালনা করা সদ্য তৈরি হওয়া ফাইলগুলি মিস করে এবং অন্যভাবে মুছে ফেলা ফাইলগুলি মিস করবে, ভিন্নতার আউটপুট তুলনা করবে:
diff -qr old/ new/
নিম্নলিখিত আউটপুট ফলন:
Files old/VERSION and new/VERSION differ
Files old/conf/mime.conf and new/conf/mime.conf differ
Only in new/data/pages: playground
Files old/doku.php and new/doku.php differ
Files old/inc/auth.php and new/inc/auth.php differ
Files old/inc/lang/no/lang.php and new/inc/lang/no/lang.php differ
Files old/lib/plugins/acl/remote.php and new/lib/plugins/acl/remote.php differ
Files old/lib/plugins/authplain/auth.php and new/lib/plugins/authplain/auth.php differ
Files old/lib/plugins/usermanager/admin.php and new/lib/plugins/usermanager/admin.php differ
উভয় উপায়ে আরএসসিএন চালানো এবং ডুপ্লিকেট অপসারণের জন্য আউটপুটকে বাছাই করলে জানা যায় যে ডিরেক্টরি data/pages/playground/
এবং ফাইলটি data/pages/playground/playground.txt
প্রাথমিকভাবে মিস হয়েছিল:
(rsync -rcn --out-format="%n" old/ new/ && rsync -rcn --out-format="%n" new/ old/) | sort | uniq
নিম্নলিখিত আউটপুট ফলন:
VERSION
conf/mime.conf
data/pages/playground/
data/pages/playground/playground.txt
doku.php
inc/auth.php
inc/lang/no/lang.php
lib/plugins/acl/remote.php
lib/plugins/authplain/auth.php
lib/plugins/usermanager/admin.php
rsync
এই তর্ক যুক্তি দিয়ে চালিত হয়:
-r
"ডিরেক্টরিতে পুনরাবৃত্তি" করতে, -c
অভিন্ন আকারের ফাইলগুলি তুলনা করতে এবং কেবল "চেকসামের উপর ভিত্তি করে এড়িয়ে যান, মোড-টাইম এবং আকার নয়", -n
"কোনও পরিবর্তন ছাড়াই একটি ট্রায়াল রান সঞ্চালন" করতে এবং,--out-format="%n"
"নির্দিষ্ট ফরমেট ব্যবহার করে আউটপুট আপডেট করতে", যা কেবলমাত্র ফাইলের নামের জন্য এখানে "% n"rsync
উভয় দিকের আউটপুট (ফাইলগুলির তালিকা) ব্যবহার করে একত্রিত করে বাছাই করা হয় sort
এবং এই সাজানো তালিকাটি এর সাথে সমস্ত নকলকে সরিয়ে কনডেন্স করা হয়uniq
diff new/ old/
কোন ডিরেক্টরি মুছে ফেলা হয়েছে তা দেখার জন্য আপনি কেবল এটি পিছন দিকে চালাতে পারবেন না ?
diff -qr new/ old/
dokuwiki tars সঙ্গে উপরোক্ত উদাহরণে হিসাবে একই আউটপুট উত্পাদন করে diff -qr old/ new/
- অর্থাৎ আপনি দেখতে ডিরেক্টরিটি এতে নতুন / অনুপস্থিত কিন্তু ফাইল হয়
diff
সেন্টোস 7 -এর ম্যান পেজটি-q
"ফাইলগুলির মধ্যে কেবল তখনই প্রতিবেদন" হিসাবে বর্ণনা করে , যা আপনি লিখেছেন তার চেয়ে কম স্পষ্ট।