تفاوت بین فایل ها یا دایرکتوری ها در لینوکس

تفاوت بین فایل ها یا دایرکتوری ها در لینوکس

 یکی از موضوعاتی که خیلی مواقع با آن مواجه می شویم این است که میخواهیم بدانیم محتوای یک فایل با فایل دیگر چه تفاوت هایی دارد .

یا مثلا تعدادی فایل در یک دایرکتوری و تعدادی در دایرکتوری دیگری داریم و میخواهیم بدانیم که تفاوت این دایرکتوری ها در چیست ؟ یا

چه فایلهایی هست که در یک دایرکتوری موجود است و در دیگری نیست .

به منظور پیدا کردن تفاوت بین فایل ها یا دایرکتوری های داخل سیستم عامل لینوکس از ابزارهای متفاوتی می توان استفاده نمود

دستور diff

یکی از این ابزار ها که در داخل کرنل لینوکس موجود است برنامه ای به نام diff  می باشد .

diff  دارای گزینه های متعددی برای چگونگی یافتن تفاوت های مورد نیاز است .

یکی از این گزینه ها   “q-”  است .

بدین معنی که تنها زمانیکه بین دو دایرکتوری اختلافی وجود داشت این اختلاف را نشان بده .

diff     -q   dir1   dir2

در شکل بالا تفاوت بین دو دایرکتوری dir1 , dir2 نمایش داده شده است .

چنانچه بخواهیم تمامی زیر شاخه های موجود در یک دایرکتوری را با دایرکتوری دیگر مقایسه کنیم از گزینه    “r-”  استفاده میکنیم :

diff    -qf     dir1   dir2

دستور meld

meld  یکی از دستوراتی است که در محیط گرافیکی GNOME  قابل استفاده می باشد .

برای نصب آن به روش زیر عمل میکنیم :

CentOS/RHEL

yum   install    meld

Ubuntu/Debian

apt-get  install meld

Fedora 22+

dnf   install  meld

 دقت کنید که برای نصب این برنامه نیاز به repository epel دارید .

بعد از نصب این برنامه کافی است که این دستور را در خط فرمان اجرا کنید که شکل زیر ظاهر مشود :

 

مثلا در شکل بالا میتونیم نام دایرکتوری هایی که برای مقایسه نیاز داریم وارد نماییم

تا بین این دو مقایسه انجام گیرد که شکل زیر ظاهر میشود.

 

همانگونه که در شکل بالا ملاحظه می فرمایید تفاوت بین دو دایرکتوری dir1 ,dir2 و زیر شاخه های آن در شکل مشاهده میگردد.

 

13 پاسخ
  1. بهار
    بهار گفته:

    سلام وقت میخواستم که برابر بودن دو فایل رو نشون بده یعنی در اصل فایل های تکراری توی دو پوشه رو نشون بده.خیر ببینید عجله دارم .هزینشو هم تقدیم میکنم .سپاس.

    پاسخ
    • صوفیا علیخانی
      صوفیا علیخانی گفته:

      سلام عرض میکنم
      به منظور فهمیدن اینکه دو فایل یا حالا هر تعداد فایل در داخل دو پوشه یکسان هستند یا خیر راهکارهای مختلفی است
      یکی از آنها استفاده از برنامه fdups است چنانچه روی نسخه debian هستید با دستور زیر این برنامه را نصب کنید

      apt-get install fdups

      اگر روی نسخه RedHat /CentOS/fedora هستید از این روش استفاده کنید :

      yum install fdups

      با هر روشی که نصب کردید به منظور استفاده از این دستور استفاده نمایید :

      fdups -r dir1 dir2

      چنانچه fdups را نصب نکردید به هر علتی یکبار دستور زیر را تست نمایید:

      diff -srq /dir1 /dir2

      چنانچه از دستورات لینوکس و bash بخواهید استفاده کنید میتوانید از دستور زیر نیز استفاده نمایید .

      (ls dir1 ; ls dir2) | awk ‘A[$0]++’

      یا این دستور

      {ls dir1 ; ls dir2;} | awk ‘A[$0]++’

      حتما >مقاله ای کامل تر در این خصوص در سایت قرار خواهم داد .
      امیدوارم این پاسخ مشکل شما را حل نماید .

      پاسخ
      • صوفیا علیخانی
        صوفیا علیخانی گفته:

        ببخشید چون جهت متن را راست به چپ می نویسد بنابراین در دستورات انتهایی خطای نوشتاری وجود داره
        | (ls dir1 ; ls dir2)
        ‘++[awk ‘A[$0

        یا

        | {ls dir1;dir2}
        ++[awk ‘A[$0

        برای درست نوشتن قسمت بعد از | را در خط بعدی نوشتم ولی کلا همگی در یک خط نوشته میشوند

        پاسخ
  2. صوفیا علیخانی
    صوفیا علیخانی گفته:

    ببخشید چون جهت متن را راست به چپ می نویسد بنابراین در دستورات انتهایی خطای نوشتاری وجود داره
    | (ls dir1 ; ls dir2)
    ‘++[awk ‘A[$0

    یا

    | {ls dir1;dir2}
    ++[awk ‘A[$0

    برای درست نوشتن قسمت بعد از | را در خط بعدی نوشتم ولی کلا همگی در یک خط نوشته میشوند

    پاسخ
  3. بهار
    بهار گفته:

    سلام وقتتون بخیر
    خیلی عذر میخوام مزاحم شدم دستورات مقایسه دو فایل رو میخواستم مثلا از لحاظ نام و نوع و سایز که از این طریق فایل های تکراری توی دو پوشه رو پیدا کنه و احتمالا یه لوپ برای مقایسه فایل های دو پوشه لازمه با دستورات شل اسکریپت باشه.فقط بفرمایید دو فایل رو با چه دستوری مقایسه میکنن مثلا از لحاظ نوع و با شل اسکریپت کافیه.یه دنیا ممنون.

    پاسخ
    • صوفیا علیخانی
      صوفیا علیخانی گفته:

      میتوانید از دستورات زیر هم استفاده کنید :

      sourcedir=src;destdir=dst;cat /tmp/output | while read file;do diff -rupN $sourcedir/$file $destdir/$file;done >> /tmp/differences;unset sourcedir destdir

      و بعد به tmp/differences/ نگاه کنید که تفاوت فایل ها را نوشته است

      پاسخ
  4. بهار
    بهار گفته:

    بزرگی کردید، حداقل تلاشمو به استادم نشون دادم فک میکنم منظورش یه برنامه مفصل بوده!خیلی خیلی سپاسگزارم از لطفتون.

    پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *