يفتح
يغلق

مقارنة الملفات حسب الحجم لينكس. نظرة عامة على أدوات المقارنة المرئية وحل تعارضات الدمج. بناء جملة الأمر مشابه للفرق



مقارنة ملفين في محطة لينكس (6)

هنا هو الحل الخاص بي لهذا:

نتائج Mkdir temp mkdir cp /usr/share/dict/american-english ~/temp/american-english-dictionary cp /usr/share/dict/british-english ~/temp/british-english-dictionary cat ~/temp/american -قاموس انجليزي | wc -l > ~/results/count-american-english-dictionary cat ~/temp/british-english-dictionary | wc -l > ~/results/count-british-english-dictionary grep -Fxf ~/temp/american-english-dictionary ~/temp/british-english-dictionary > ~/results/common-english grep -Fxvf ~/results /common-english ~/temp/american-english-dictionary > ~/results/unique-american-english grep -Fxvf ~/results/common-english ~/temp/british-english-dictionary > ~/results/unique-british -إنجليزي

هناك ملفان اسمه "a.txt"و "b.txt"، ذوالتي توجد بها قائمة الكلمات. الآن أريد التحقق من الكلمات التي تمت إضافتها إليها "a.txt"وليسوا في "ب.txt" .

أحتاج إلى خوارزمية فعالة لأنني بحاجة إلى مقارنة قاموسين.

يمكنك استخدام أداة الفرق في Linux لمقارنة ملفين. لتصفية البيانات المطلوبة يمكنك استخدامها الخيارات - تنسيق المجموعة المتغيرةو --تنسيق المجموعة غير متغير .

يمكن استخدام الخيارات الثلاثة التالية لتحديد المجموعة المناسبة لكل خيار:

    "% <" получить строки из FILE1

    يحصل "%>" على صفوف من FILE2

    "" (سلسلة فارغة) لإزالة الأسطر من كلا الملفين.

على سبيل المثال: فرق --تغيير تنسيق المجموعة = "%<" --unchanged-group-format = "" file1.txt file2.txt

[ tmp]# اختبار cat file1.txt اختبار واحد اختبار اثنين اختبار ثلاثة اختبار أربعة اختبار ثمانية [ tmp]# اختبار cat file2.txt اختبار واحد ثلاثة اختبار تسعة [ tmp]# diff --changed-group-format = "%<" --unchanged-group-format="" file1.txt file2.txt test two test four test eight

إذا كنت تفضل نمط الإخراج المختلف لـ git diff، فيمكنك استخدامه مع علامة --no-index لمقارنة الملفات غير الموجودة في مستودع git:

Git diff --no-index a.txt b.txt

باستخدام ملفين يحتوي كل منهما على سلاسل اسم ملف 200 كيلو، قمت بمقارنة هذا الأسلوب (مع أمر الوقت المدمج) وبعض الإجابات الأخرى هنا:

Git diff --no-index a.txt b.txt # ~1.2s comm -23<(sort a.txt) <(sort b.txt) # ~0.2s diff a.txt b.txt # ~2.6s sdiff a.txt b.txt # ~2.7s vimdiff a.txt b.txt # ~3.2s

يبدو أن comm هو الأسرع على الإطلاق، في حين يبدو أن git diff --no-index هو أسرع أسلوب للمخرجات ذات النمط diff.

تحديث 2018-03-25 في الواقعيمكنك حذف علامة --no-index إذا لم تكن في مستودع git وتريد مقارنة الملفات غير القابلة للتشغيل في هذا المستودع. من صفحات الرجل:

تم تصميم هذا النموذج لمقارنة البيانات من مسارين لنظام الملفات. يمكنك حذف الخيار -no-index عند تشغيل الأمر في شجرة عمل مُدارة بواسطة Git وواحدة على الأقل من نقاط المسار خارج شجرة العمل، أو عند تشغيل الأمر خارج شجرة عمل مُدارة بواسطة Git.

استخدم الاتصال -13 (يتطلب ملفات مرتبة) :

$ cat file1 واحد اثنان ثلاثة $ cat file2 واحد اثنان ثلاثة أربعة $ comm -13<(sort file1) <(sort file2) four

قم بفرزها واستخدم comm:

بالاتصالات 23<(sort a.txt) <(sort b.txt)

comm يقارن (يفرز) ملفات الإدخال ويخرج بشكل افتراضي ثلاثة أعمدة: الخطوط الفريدة لـ a، والخطوط الفريدة لـ b، والخطوط الموجودة في كليهما. من خلال تحديد -1 و/أو -2 و/أو -3 يمكنك منع الإخراج المقابل. لذلك، comm -23 ab يسرد فقط الإدخالات الفريدة لـ a. بناء الجملة الذي أستخدمه هو<(...) для сортировки файлов на лету, если они уже отсортированы, вам это не нужно.

إذا كان لديك vim مثبتا، جرب هذا:

ملف Vimdiff1 ملف2

فيم -d file1 file2

سوف تجدها رائعة.

لمقارنة ملفين أو أكثر في Linux، يوجد أمر diff. يمكنه مقارنة الملفات والأدلة الفردية. دعونا نلقي نظرة على بناء الجملة وخيارات الأمر diff وبعض أمثلة الاستخدام.

بناء جملة الأمر فرق

يحتوي الأمر diff على بناء الجملة التالي:

فرق [الخيارات] الملفات أو الدلائل

نحدد الخيارات ونوفر ملفين أو أكثر من الملفات أو الأدلة التي نحتاج إلى مقارنتها.

خيارات أمر الفرق

دعونا نلقي نظرة على الخيارات الرئيسية للأمر diff. سأفكر فقط في تلك الخيارات التي أستخدمها في أغلب الأحيان.

-Eتجاهل التغييرات الناتجة عن إضافة حرف علامة تبويب إلى النص.
تجاهل التغييرات الناتجة عن إضافة مسافات.
تجاهل التغييرات التي تتضمن إضافة مسافات وعلامات تبويب.
تجاهل الأسطر الفارغة الجديدة.
-p (أو --show-c-function)إظهار اسم وظيفة لغة C التي تم العثور على التغييرات فيها.
-y (أو - جنبًا إلى جنب)عرض النتائج في عمودين.
تصفح الدلائل بشكل متكرر.
-ملف Xاستبعاد من ملفات البحث التي تتطابق أسماؤها مع الأنماط الموجودة في ملف FILE.
-د (أو --الحد الأدنى)حاول العثور على أقل عدد ممكن من التغييرات (أي استبعاد النتائج الإيجابية الخاطئة).

أمثلة على استخدام الأمر diff

مقارنة ملفين نصيين

لمقارنة ملفين نصيين باسم myfile1 وmyfile2، قم بتشغيل الأمر في الوحدة الطرفية:

فرق myfile1 myfile2

من الملائم إعادة توجيه مخرجات أمر diff إلى ملف بامتداد diff. تتعرف معظم برامج تحرير النصوص في Linux، مثل Gedit، على هذا الملف وتحدد تركيبه. لتوجيه نتيجة المقارنة إلى ملف التغييرات.diff، تحتاج إلى استخدام رمز إعادة توجيه الدفق (>):

فرق myfile1 myfile2 > التغييرات.diff

مقارنة الدلائل التي تحتوي على ملفات نصية

دعونا نلقي نظرة على مثال لمقارنة دليلين (mydir1 وmydir2) يحتويان على ملفات نصية. الفرق الرئيسي هنا عن المثال أعلاه هو أننا سنضيف الخيار -r، مما يعني أنه سوف يجتاز الملفات في الدلائل بشكل متكرر.

فرق -r mydir1 mydir2 > التغييرات.diff

لنفترض الآن أن الدلائل التي نقارن فيها الملفات تحتوي على الكثير من "البيانات المهملة" التي لا ينبغي لنا مقارنتها. لنقم بإنشاء ملف ExceptionFiles ونكتب فيه أنماط وأسماء الملفات التي لا ينبغي لنا مقارنتها. على سبيل المثال، قد تبدو محتويات ملف ExceptionFiles كما يلي:

*.o سجل التغيير* *.bak *.exe

الآن دعنا نخبر الأمر diff أن يستخدم ملف ExceptionFiles الخاص بنا عند مقارنة الدلائل:

فرق -r -X استبعاد الملفات mydir1 mydir2 > التغييرات.diff

وبالتالي، نقوم بمقارنة الملفات التي لا تتطابق أسماؤها مع الأنماط الموجودة في ملف ExceptFiles، على سبيل المثال، vasya.exe أو ChangeLog12.

دعنا نضيف بعض الخيارات الموضحة أعلاه لتحسين نتيجة المقارنة:

فرق -rwBd -X استبعاد الملفات mydir1 mydir2 > التغييرات.diff

نقوم بمقارنة الملفات الموجودة في دليلي mydir1 وmydir2، مع تجاهل التغييرات الناتجة عن إضافة أسطر فارغة ومسافات وعلامات تبويب، ونستخدم أيضًا أنماط أسماء الملفات في ExceptionFiles لاستبعاد الملفات غير الضرورية من المقارنة.

خاتمة

لمزيد من المعلومات حول استخدام الأمر diff على نظام Linux الخاص بك، يمكنك تشغيل الأمر:

فرق الرجل

هناك أيضًا برامج تتيح لك مقارنة الملفات باستخدام واجهة رسومية. على سبيل المثال، برنامج Meld، الذي يوضح بشكل مرئي أين وماذا تغير في الملفات.

)، مقارناتهم، بالإضافة إلى مقارنات بين عملاء واجهة المستخدم الرسومية (GUI) لهم. كانت هناك أيضًا مناقشات حول مكونات IDE الإضافية للعمل مع git وmercurial. لكن عمليا لم تكن هناك معلوماتحول المقارنة المرئية ودمج أدوات حل النزاعات.

لقد "قفزت" مؤخرًا من Mercurial (الذي ما زلت أجده أكثر ملاءمة ومنطقية) إلى git، لأن الغالبية العظمى من المشاريع التي تهمني تستخدم git ويتم استضافتها على github. وفي هذا الصدد، أثير التساؤل حول مراجعة ترسانة الأدوات، ولا سيما السؤال اختيار الأداةالمقارنة البصرية والدمج (الفرق والدمج). من أجل سد النقص في المعلومات حول المركز، قررت أن أكتب هذه المراجعة المصغرة. كما يقولون - في المطاردة الساخنة.

ستجد أيضًا أسفل المقطع أمثلة لإعدادات Git للاستخدام مع DiffMerge وWinMerge ضمن Windows. أعتقد أنه سيوفر الكثير من الوقت.

اسم الخصائص منصة

KDiff3

جيت وWinMerge

1) أضف إلى الدليل ج:/جيت/libexec/git-core/mergetools/
ملف winmerge بالمحتوى التالي:

Diff_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Program Files (x86)" )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 Status=$? )
عندما يفشل Git في دمج التغييرات تلقائيًا، يحدث تعارض دمج وتتم إضافة علامات الدمج إلى الملف المتعارض (<<<<<<<, =======, и >>>>>>>). إنها ضرورية لحل النزاع باستخدام أدوات الطرف الثالث.
دعونا نلقي نظرة على الملف readme.txtوالتي تتشكل نتيجة دمج الفروع سيد وجديدفي المثال أعلاه:

<<<<<<< HEAD master str ======= new str >>>>>>> جديد
يمكننا فتح ملف التعارض باستخدام برنامج WinMerge لحل التعارض.

سيؤدي هذا إلى فتح أداة الدمج ثنائي الاتجاه:

بناء على المنطق الموصوف، سنعيد كتابة أمر الدمج merge_cmdبالطريقة الآتية:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 الحالة=$? )
في الواقع، كلا الخيارين المذكورين أعلاه متساويان.

2) دعونا تحرير .gitconfig
أداة = winmerge cmd = "winmerge" أداة = winmerge cmd = "winmerge" TrustExitCode = false keepBackup = false
يلغي السطر الأخير حفظ ملفات النسخ الاحتياطي في دليل المستودع.

3) لنقم بإنشاء تعارض عند دمج فرعين (انظر المثال باستخدام DiffMerge).
git difftool master جديد // قارن بين فرعين

لحل التعارض عند دمج الفروع، استخدم الأمر
git mergetool

)، مقارناتهم، بالإضافة إلى مقارنات بين عملاء واجهة المستخدم الرسومية (GUI) لهم. كانت هناك أيضًا مناقشات حول مكونات IDE الإضافية للعمل مع git وmercurial. لكن عمليا لم تكن هناك معلوماتحول المقارنة المرئية ودمج أدوات حل النزاعات.

لقد "قفزت" مؤخرًا من Mercurial (الذي ما زلت أجده أكثر ملاءمة ومنطقية) إلى git، لأن الغالبية العظمى من المشاريع التي تهمني تستخدم git ويتم استضافتها على github. وفي هذا الصدد، أثير التساؤل حول مراجعة ترسانة الأدوات، ولا سيما السؤال اختيار الأداةالمقارنة البصرية والدمج (الفرق والدمج). من أجل سد النقص في المعلومات حول المركز، قررت أن أكتب هذه المراجعة المصغرة. كما يقولون - في المطاردة الساخنة.

ستجد أيضًا أسفل المقطع أمثلة لإعدادات Git للاستخدام مع DiffMerge وWinMerge ضمن Windows. أعتقد أنه سيوفر الكثير من الوقت.

اسم الخصائص منصة

KDiff3

جيت وWinMerge

1) أضف إلى الدليل ج:/جيت/libexec/git-core/mergetools/
ملف winmerge بالمحتوى التالي:

Diff_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Program Files (x86)" )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 Status=$? )
عندما يفشل Git في دمج التغييرات تلقائيًا، يحدث تعارض دمج وتتم إضافة علامات الدمج إلى الملف المتعارض (<<<<<<<, =======, и >>>>>>>). إنها ضرورية لحل النزاع باستخدام أدوات الطرف الثالث.
دعونا نلقي نظرة على الملف readme.txtوالتي تتشكل نتيجة دمج الفروع سيد وجديدفي المثال أعلاه:

<<<<<<< HEAD master str ======= new str >>>>>>> جديد
يمكننا فتح ملف التعارض باستخدام برنامج WinMerge لحل التعارض.

سيؤدي هذا إلى فتح أداة الدمج ثنائي الاتجاه:

بناء على المنطق الموصوف، سنعيد كتابة أمر الدمج merge_cmdبالطريقة الآتية:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 الحالة=$? )
في الواقع، كلا الخيارين المذكورين أعلاه متساويان.

2) دعونا تحرير .gitconfig
أداة = winmerge cmd = "winmerge" أداة = winmerge cmd = "winmerge" TrustExitCode = false keepBackup = false
يلغي السطر الأخير حفظ ملفات النسخ الاحتياطي في دليل المستودع.

3) لنقم بإنشاء تعارض عند دمج فرعين (انظر المثال باستخدام DiffMerge).
git difftool master جديد // قارن بين فرعين

لحل التعارض عند دمج الفروع، استخدم الأمر
git mergetool

غالبًا ما يحتاج مشرفو المواقع أو مالكو مواقع الويب إلى مقارنة ملفين بناءً على المحتوى. ستتعلم من هذه المقالة كيفية مقارنة ملفين مع بعضهما البعض. جميع الطرق المعروفة بالنسبة لي لمقارنة الملفات النصية والبرامج النصية (html، css، php، وما إلى ذلك) موصوفة هنا.

الطريقة الأولى: الخلط

امزج- أداة رسومية للحصول على الاختلافات ودمج ملفين ودليلين. Meld عبارة عن أداة مرئية لمقارنة الملفات والدليل ودمجها لنظام التشغيل Linux. يستهدف Meld في المقام الأول المطورين. ومع ذلك، قد يكون مفيدًا لأي مستخدم يحتاج إلى أداة جيدة لمقارنة الملفات والأدلة.

في Meld يمكنك مقارنة ملفين أو ثلاثة ملفات، أو دليلين أو ثلاثة أدلة. يمكنك عرض نسخة العمل من أنظمة التحكم في الإصدار الشائعة مثل CVS وSubversion وBazaar-NG وMercurial. يتوفر Meld لمعظم توزيعات Linux (Ubuntu، وSuse، وFedora، وما إلى ذلك)، وهو موجود في مستودعاتها الرئيسية.

# تركيب الكفاءة مختلط

الطريقة الثانية: مقارنة محتويات ملفين في WinMerge.

يتيح لك برنامج WinMerge المجاني مقارنة محتويات الملفات ليس فقط، بل يقارن أيضًا محتويات المجلدات بأكملها. WinMerge هي أداة فرق ودمج مفتوحة المصدر لنظام التشغيل Windows. يمكن لـ WinMerge مقارنة الملفات والمجلدات، وعرض الاختلافات في نموذج نصي مرئي يسهل فهمه ومعالجته.

بعد التثبيت، افتح عنصر القائمة "ملف" - "فتح". حدد الملفات للمقارنة. للقيام بذلك، انقر فوق الزر "استعراض" وحدد ملفًا. بعد تحديد الملفات، انقر على زر "موافق".

يمكنك أيضًا تحرير الملفات في WinMerge. بعد إغلاق نافذة المقارنة، سيعرض البرنامج حفظ التغييرات على الملفات.

الطريقة الثالثة

فرق- أداة مقارنة الملفات التي تعرض الفرق بين ملفين.

    لمقارنة الدلائل استخدم هذا الأمر: $ diff -qr< current-directory> < backup-directory>

الطريقة الرابعة. قارن

Kompare - يعرض الاختلافات بين الملفات. يمكن مقارنة محتويات الملفات أو الدلائل، وكذلك إنشاء ملفات التصحيح وعرضها وتطبيقها. Kompare هي أداة مساعدة رسومية تتيح لك العثور على الاختلافات في الملفات ودمجها أيضًا. مكتوب بلغة Qt ومصمم بشكل أساسي لـ KDE. وهنا ميزاته الرئيسية:

    يدعم صيغ فرق متعددة.

    دعم المقارنة بين ملفات وأدلة Linux؛

    دعم لعرض ملفات الفرق.

    واجهة قابلة للتخصيص.

    إنشاء وتطبيق التصحيحات على الملفات.

الطريقة الخامسة. مقارنة الملفات في Total Commander

    أنظمة التشغيل المدعومة: ويندوز

يحتوي Total Commander على أداة لمقارنة الملفات حسب المحتوى، حيث لا يمكنك مقارنة المحتوى فحسب، بل يمكنك أيضًا تحريره ونسخه من ملف إلى آخر.

بعد تشغيل Total Commander - في إحدى اللوحات، حدد (إدراج مفتاح) الملف الأول للمقارنة - في اللوحة الثانية، افتح المجلد الذي يحتوي على الملف الثاني وضع المؤشر عليه. اتصل بالبرنامج للمقارنة: "Files → Compare by content".

لإجراء تغييرات على الملف، فقط انقر على زر "تحرير". يقدم البرنامج وظائف النسخ والتراجع والبحث والترميز. إذا قمت بإجراء تغييرات على الملف، بعد إغلاق نافذة المقارنة، سيُطلب منك حفظ التغييرات.

الطريقة السادسة. مقارنة الملفات في برنامج Notepad++

    أنظمة التشغيل المدعومة: ويندوز، ويمكن تشغيله على لينكس

لا يمكن لبرنامج Notepad++ مقارنة الملفات. لكي تظهر هذه الوظيفة في Notepad++، تحتاج إلى تثبيت البرنامج المساعد "Compare".

قم بتشغيل المحرر - انتقل إلى عنصر القائمة "المكونات الإضافية" - "مدير المكونات الإضافية" - "إظهار مدير المكونات الإضافية". في النافذة الجديدة، حدد المكون الإضافي "مقارنة" وانقر فوق الزر "تثبيت".

بعد تثبيت البرنامج المساعد، افتح ملفين وحدد القائمة "المكونات الإضافية" - "مقارنة" - "مقارنة (Alt+D)". سيتم عرض نتيجة مقارنة الملفات في لوحات منفصلة. ستظهر علامة تحذيرية مقابل الخطوط التي توجد فيها الاختلافات.

الطريقة السابعة: مقارنة الملفات باستخدام موجه أوامر Windows

المقارنة باستخدام سطر أوامر Windows (cmd.exe) لا تسمح لك بتحرير الملفات، ولكن يمكنك ببساطة مقارنة محتويات الملفات باستخدام هذه الطريقة.

لفتح سطر أوامر Windows، انتقل إلى "ابدأ" - "كافة البرامج" - "البرامج الملحقة" - "موجه الأوامر" أو اضغط على مفتاح "Windows + R"، واكتب cmd واضغط على مفتاح Enter.

في موجه الأوامر، أدخل الأمر:

مسار fc/N إلى مسار الملف الأول إلى الملف الثاني