diff - مقایسه خط به خط دو فایل

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-شما می‌توانید به صورت بازگشتی در زیرمسیرها هم به همین شکل عمل کنید .