it-swarm.asia

بالنظر إلى شجرتي دليل ، كيف يمكنني معرفة الملفات التي تختلف؟

إذا كنت أريد العثور على الاختلافات بين شجرتي الدليل ، فعادةً ما أقوم بتنفيذ فقط:

diff -r dir1/ dir2/

هذا يخرج بالضبط ما هي الاختلافات بين الملفات المقابلة. أنا مهتم بالحصول على قائمة بالملفات المطابقة التي يختلف محتواها. لقد افترضت أن هذا سيكون ببساطة مسألة تمرير خيار سطر أوامر إلى diff ، لكنني لم أتمكن من العثور على أي شيء في صفحة man.

أي اقتراحات؟

692
Mansoor Siddiqui

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

diff --brief --recursive dir1/ dir2/ # GNU long options
diff -qr dir1/ dir2/ # common short options

يجب أن تفعل ما تحتاجه.

إذا كنت تريد أيضًا رؤية الاختلافات في الملفات التي قد لا توجد في أي من الدلائل:

diff --brief --recursive --new-file dir1/ dir2/ # GNU long options
diff -qrN dir1/ dir2/ # common short options
990
Mark Loeser

الأمر الذي أستخدمه هو:

diff -qr dir1/ dir2/

هو بالضبط نفس مارك :) ولكن إجابته أزعجني لأنه يستخدم أنواع مختلفة من الأعلام ، وجعلني أبدو مرتين. باستخدام علامات مارك المطوّلة ، سيكون:

diff  --brief --recursive dir1/ dir2/

أعتذر عن النشر عندما تكون الإجابة الأخرى مقبولة تمامًا. لا يمكن أن أتوقف عن نفسي ... العمل على أن أكون أقل تقلبًا.

279
FPC

أرغب في استخدام git diff --no-index dir1/ dir2/ ، لأنه يمكنه إظهار الاختلافات في اللون (إذا كان لديك هذا الخيار مضبوط في تنسيق git الخاص بك) ولأنه يعرض جميع الاختلافات في إخراج ذي صفحات طويلة باستخدام "أقل".

89
Alan Porter

يقوم هذان الأمران في الأساس بالشيء المطلوب:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

يعتمد الاختيار بينهما على موقع dir1 و dir2:

عندما تتواجد الدلائل على محركين منفصلين ، يتفوق الفرق على rsync. ولكن عندما يكون الدليلان المقارنان على نفس محرك الأقراص ، يكون rsync أسرع. ذلك لأن فرق يضع حمولة متساوية تقريبا على كلا الدلائل في نفس الوقت ، وزيادة الحمل على محركي الأقراص.

يحسب rsync المجموع الاختباري في أجزاء كبيرة قبل مقارنتها بالفعل. يعمل ذلك على تجميع عمليات الإدخال/الإخراج في مجموعات كبيرة ويؤدي إلى معالجة أكثر كفاءة عندما تحدث الأشياء على محرك أقراص واحد.

30
CodeBug

Meldهو أيضًا أداة رائعة لمقارنة دليلين:

meld dir1/ dir2/

يحتوي Meld على العديد من الخيارات لمقارنة الملفات أو الدلائل. إذا كان هناك ملفان مختلفان ، فمن السهل إدخال وضع مقارنة الملفات ومعرفة الاختلافات الدقيقة.

15
Alexander

تمت مشاركة 'billings' من مواطني القناة (من freenode/# centos fame) طريقته معي:

diff -Naur dir1/ dir2

بما في ذلك الدليل النهائي إلى الأمام مائل لا يهم.

أيضًا ، يبدو أن الخيار -u غير متاح في بعض الإصدارات الأقدم/لخوادم الفرق.

الفرق في الفرق:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ
9
todd_dsm

Diffoscope هو أداة فرق دليل على أساس سطر الأوامر كبيرة.

يعجبني بشكل خاص أنه يمكن أن فرق إلى ملفات:

سيؤدي ذلك إلى فك المحفوظات من أنواع كثيرة بشكل متكرر وتحويل التنسيقات الثنائية المختلفة إلى شكل أكثر قابلية للقراءة البشرية لمقارنتها. يمكن أن تقارن بين نقطتين ، صور ISO ، أو PDF بنفس السهولة.

لن تخبرك فقط بالملفات التي تختلف ، ولكن أيضًا كيف ستختلف.

3
nh2

للعثور على فرق استخدم هذا الأمر:

diff -qr dir1/ dir2/

-r سوف فرق جميع الدلائل الفرعية أيضا -q يخبر الفرق للإبلاغ فقط عندما تختلف الملفات.

diff  --brief dir1/ dir2/

- Brief ستُظهر الملفات التي توجد dosent في الدليل.

او اخرى

يمكننا استخدام Meld والذي سيظهر في نافذة رسومية من السهل العثور على الفرق.

meld  dir1/ dir2/
2
Javeed Shakeel

يمكنك أيضًا استخدام Rsync و find. لـ find:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

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

إذا كنت من محبي واجهة المستخدم الرسومية ، فيمكنك التحقق من Meld that @ الكسندر المذكورة. أنه يعمل بشكل جيد في كل من ويندوز ولينكس.

0
Fábio