Android

Arahan di linux

How To Compare Files And Directories Using The diff Command in Linux

How To Compare Files And Directories Using The diff Command in Linux

Isi kandungan:

Anonim

diff adalah utiliti baris arahan yang membolehkan anda membandingkan dua fail baris demi baris. Ia juga boleh membandingkan kandungan direktori.

Perintah diff paling biasa digunakan untuk membuat patch yang mengandungi perbezaan antara satu atau lebih fail yang boleh digunakan menggunakan perintah patch .

Bagaimana Menggunakan Perintah diff

Sintaks untuk arahan diff adalah seperti berikut:

diff… FILES

Perintah diff dapat memaparkan output dalam beberapa format dengan format biasa, konteks, dan bersatu menjadi yang paling umum. Output termasuk maklumat tentang baris mana dalam fail mesti diubah supaya mereka menjadi identik. Jika fail sepadan, tiada output dihasilkan.

Untuk menyimpan output arahan ke fail, gunakan pengendali redirection:

diff file1 file2 > patch

, kami akan menggunakan dua fail berikut untuk menjelaskan bagaimana arahan diff berfungsi:

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Format Normal

Dalam bentuk yang paling mudah apabila arahan diff dijalankan pada dua fail teks tanpa sebarang pilihan, ia menghasilkan output dalam format normal:

diff file1 file2

Output akan kelihatan seperti ini:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Format keluaran normal terdiri daripada satu atau lebih bahagian yang menggambarkan perbezaannya. Setiap bahagian kelihatan seperti ini:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 dan 4c4, 5 adalah perintah perubahan. Setiap arahan perubahan mengandungi yang berikut, dari kiri ke kanan:

  • Nombor baris atau julat garisan dalam fail pertama. Aksara perubahan khas. Nombor baris atau julat garisan dalam fail kedua.

Watak perubahan boleh menjadi salah satu daripada yang berikut:

  • a - Tambah garisan. c - Tukar garisan. d - Padam baris.

Perintah perubahan diikuti oleh baris lengkap yang dikeluarkan ( < ) dan ditambahkan ke fail ( > ).

Mari kita jelaskan output:

  • 0a1 - Tambahkan baris 1 fail kedua pada permulaan fail1 (selepas baris 0 ).
    • > Kubuntu - Baris dari baris kedua yang ditambahkan pada fail pertama seperti yang diterangkan di atas.
    2d2 - Padamkan baris 2 dalam fail pertama. 2 selepas simbol d bermakna bahawa jika garis tidak dipadamkan ia akan muncul pada baris 2 dalam fail kedua.
    • < Arch Linux - baris yang dipadamkan.
    4c4, 5 - Gantikan (ubah) garisan 5 dalam fail pertama dengan garisan 4-5 dari fail kedua.
    • < CentOS - Baris dalam fail pertama akan diganti. --- - Separator. > Arch Linux dan > Centos - Talian dari fail kedua menggantikan baris dalam fail pertama.

Format Konteks

Apabila format output konteks digunakan, arahan diff memaparkan beberapa baris konteks di sekitar baris yang berbeza antara fail.

Pilihan -c memberitahu diff untuk menghasilkan output dalam format konteks:

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Output bermula dengan nama dan timestamp jika file yang dibandingkan, dan satu atau lebih bahagian yang menggambarkan perbezaannya. Setiap bahagian kelihatan seperti ini:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers dan from-file-line-numbers to-file-line-numbers - Nombor baris atau pelbagai baris yang dipisahkan koma dalam fail pertama dan kedua, masing-masing. from-file-line dan to-file-line - Barisan yang berbeza dan garis konteks:
    • Garis bermula dengan dua ruang adalah garis konteks, garis yang sama dalam kedua-dua fail. Talian yang bermula dengan simbol tolak ( - ) adalah garis yang tidak sesuai dengan apa-apa dalam fail kedua. Talian hilang dalam fail kedua. Talian yang bermula dengan simbol ditambah ( + ) adalah garisan yang tidak sesuai dengan apa-apa dalam fail pertama. Talian hilang dalam fail pertama.Lain bermula dengan tanda seru ( ! ) Adalah garisan yang ditukar antara dua fail. Setiap kumpulan baris bermula dengan ! dari fail pertama mempunyai padanan yang sama dalam fail kedua.

Mari kita jelaskan bahagian-bahagian paling penting output:

  • Dalam contoh ini kita hanya mempunyai satu bahagian yang menggambarkan perbezaannya. *** 1, 6 **** dan --- 1, 7 ---- memberitahu kami berbagai baris dari file pertama dan kedua yang disertakan dalam bagian ini.Lines Ubuntu , Debian , Fedora , dan garisan kosong terakhir adalah sama dalam kedua-dua fail. Garis-garis ini bermula dengan ruang ganda. Talian - Arch Linux dari fail pertama sepadan dengan apa-apa dalam fail kedua. Walaupun garis ini juga wujud dalam fail kedua, kedudukannya berbeza.Line + Kubuntu dari fail kedua sepadan dengan apa-apa dalam fail pertama.Line ! CentOS ! CentOS dari fail pertama dan baris ! Arch Linux ! Arch Linux and ! CentOS ! CentOS dari fail kedua diubah antara fail.

Secara lalai bilangan baris konteks mungkir kepada tiga. Untuk menentukan nombor lain gunakan pilihan -C ( --contexts ):

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Format Bersatu

Format keluaran bersatu adalah versi yang lebih baik dalam format konteks dan menghasilkan keluaran yang lebih kecil.

Gunakan pilihan -u untuk memberitahu diff untuk mencetak output dalam format bersatu:

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

Output bermula dengan nama dan timestamps fail dan satu atau lebih bahagian yang menggambarkan perbezaan. Setiap bahagian mengambil borang berikut:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Nombor baris atau julat garisan dari fail pertama dan kedua yang termasuk dalam bahagian ini. line-from-files - Barisan yang berbeza dan garis konteks:
    • Garis yang bermula dengan dua ruang adalah garis konteks, garis yang sama dalam kedua-dua fail. Talian bermula dengan simbol minus ( - ) adalah garis yang dikeluarkan dari fail pertama. Talian yang bermula dengan simbol ditambah ( + ) adalah baris yang ditambah dari fail pertama.

Abaikan kes

Seperti yang anda perhatikan dalam contoh di atas, perintah diff adalah sensitif kes secara lalai.

Gunakan pilihan -i untuk memberitahu diff untuk mengabaikan kes:

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

Kesimpulannya

Membandingkan fail teks untuk perbezaan adalah salah satu tugas yang paling biasa untuk pentadbir sistem Linux.

Perintah diff membandingkan fail baris demi baris. Untuk maklumat lanjut, taip man diff di terminal anda.

terminal diff