diff - از این دستور برای مقایسه دو فایل به صورت خط به خط استفاده می شود.
شکل کلی دستور :
$ diff options fileOne fileTwo
درواقع خروجی این دستور، خروجی تفاوتهای دو فایل میباشد. در ابتدا با یک مثال ساده کار را شروع میکنیم (فایل one و فایل two از قبل ایجاد شده است.) :
$ cat .../one 11111111111111111111 22222222222222222222 33333333333333333333
$ cat .../two 44444444444444444444 55555555555555555555 66666666666666666666
$ diff .../one .../two 1,3c1,3 < 11111111111111111111 < 22222222222222222222 < 33333333333333333333 --- > 44444444444444444444 > 55555555555555555555 > 66666666666666666666
همینطور که در خروجی مشاهده میکنید، تفاوتهای دو فایل را به خوبی تشخیص داده و آنرا در خروجی استاندارد چاپ میکند.
این دستور براساس روش یافتن بزرگترین زیر دنباله مشترک (Longest Common Subsequence) عمل میکند. (این روش که به صورت برنامهنویسی پویا پیاده سازی میشود یکی از مسائل قدیمی در علوم کامپیوتر است و در زیر شاخه های پزشکی هم استفاده می شود.)
توسط گزینهاختیاری y-
شما میتوانید خروجی را به صورت دو ستون مشاهده کنید :
$ diff -y .../one .../two 11111111111111111111 | 44444444444444444444 22222222222222222222 | 55555555555555555555 33333333333333333333 | 66666666666666666666
توسط گزینه اختیاری T-
خروجی با چندفاصله دیده خواهد شد :
$ diff -T .../one .../two 1,3c1,3 < 11111111111111111111 < 22222222222222222222 < 33333333333333333333 --- > 44444444444444444444 > 55555555555555555555 > 66666666666666666666
توسط گزینهی اختیاری w-
فضای خالی نادیده گرفته میشود. برای مثال، محتوای دو فایل زیر یکسان است پس در خروجی هیچچیز نخواهیم داشت:
$ diff .../1 .../2
با ایجاد یک فاصله در یک ردیف از یک فایل خروجی تفاوت را نشان میدهد :
$ diff .../1 .../2 1c1 < 11111111111111111111 --- > 1111111111 1111111111
که با اضافه کردن این گزینه اختیاری این فضای خالی نادیده گرفته میشود (پس خروجیای نخواهیم داشت):
$ diff -w .../1 .../2
شما حتی میتوانید محتویات دو پوشه را با یکدیگر مقایسه کنید. به این منظور دو پوشه ایجاد کردهام که یکی از آنها دو فایل به نامهای 1 و 2 دارد و پوشه دوم دو فایل به نامهای 3 و 4 دارد. توسط دستور ls خروجی را با یکدیگر میبینیم :
$ ls .../FOLDER1 .../FOLDER2 .../FOLDER1: 1 2 .../FOLDER2: 3 4
باهم خروجی diff را میبینیم :
$ diff .../FOLDER1 .../FOLDER2 Only in .../FOLDER1: 1 Only in .../FOLDER1: 2 Only in .../FOLDER2: 3 Only in .../FOLDER2: 4
توسط گزینه اختیاری مشهور r-
شما میتوانید به صورت بازگشتی در زیرمسیرها هم به همین شکل عمل کنید .