Menü
Bedava
giriş
ev  /  Programlar / Web geliştiricisi için Linux'daki dosyaların karşılaştırılması. Linux Karşılaştırma Hex Dosyalarındaki Metin Dosyalarının Karşılaştırılması Linux

Web Geliştirici için Linux'daki dosyaların karşılaştırılması. Linux Karşılaştırma Hex Dosyalarındaki Metin Dosyalarının Karşılaştırılması Linux

Bazen birkaç dosyayı kendi aralarında karşılaştırma ihtiyacı vardır. Bu, yapılandırma dosyasının birkaç sürümü arasındaki farkı analiz ederken veya çeşitli dosyaları karşılaştırmak için bu gerekebilir. Linux'ta, hem terminal boyunca hem de grafik arayüzde çalışmak için birkaç yardımcı program var.

Bu yazıda, Linux dosyalarının nasıl karşılaştırıldığına bakacağız. Hem terminal hem de grafik modda en faydalı yolları analiz edeceğiz. İlk önce, Diff yardımcı programını kullanarak Linux dosyasını nasıl karşılaştırılacağını düşünün.

  • Diff dosyalarının karşılaştırılması

    Diff Linux yardımcı programı, konsol modunda çalışan bir programdır. Sözdizimi çok basittir. Yardımcı programı ara, geç dosyalarVe gerekirse seçenekleri de belirleyin:

    $ diff dosya dosyası1 dosya2

    Gerekirse ikiden fazla dosya geçebilirsiniz. Örneklere geçmeden önce, seçenekler yardımcı programlarına bakalım:

    • -Q. - Sadece dosyalar arasındaki farkları gösterin;
    • -s. - Yalnızca çakışan kısmı çıktı;
    • -ile - Tesadüfin ardından istediğiniz satır sayısını çıkarın;
    • -u. - farklılıklardan sonra sadece istenen satır sayısını çıkarmak;
    • -y - İki sütun halinde göster;
    • -E. - ED betiğinin biçiminde çıkış;
    • -N. - RCS formatındaki çıkış;
    • -a. - Metin olmasalar bile dosyaları metin olarak karşılaştırın;
    • -t. - Çıktındaki boşluklardaki sekmeleri değiştirin;
    • -L. - Sayfaları bölün ve kazıma desteği ekleyin;
    • -r. - Klasörlerin özyinelemeli karşılaştırılması;
    • -BEN. - Kayıtları yoksay;
    • -E. - Sekmelerindeki değişiklikleri yoksay;
    • -Z. - çizginin sonundaki boşlukları dikkate almamak;
    • -b. - boşlukları dikkate almak değil;
    • -B. - Boş satırları dikkate almayın.

    Bunlar ana seçenekler yardımcı program seçenekleri idi, şimdi Linux dosyalarının nasıl karşılaşacağına bakalım. Yardımcı programın doğrudan çıktısında, değişiklikleri görüntüleme, hangi çizginin ve ne yapıldığını gösteren bir dize görüntüler. Bu bu karakterleri kullanır:

    • a. - katma;
    • d. - kaldırıldı;
    • c. - değişti.

    Ek olarak, farklı olan çizgiler sembol tarafından gösterilecektir.<, а те, которые совпадают - символом >.

    İşte test dosyalarımızın içeriği:

    Şimdi diff dosyalarının karşılaştırılmasını sağlayalım:
    $ diff dosya1 dosya2

    Sonuç olarak, bir satır alıyoruz: 2.3C2.4. Yağların 2 ve 3'ü değiştirildiği anlamına gelir. Kayıtları yoksaymak için seçenekleri kullanabilirsiniz:
    $ Diff -i file1 file2

    İki sütunla sonuçlandırabilirsiniz:
    $ Diff -y file1 file2

    Ve -u seçeneğini kullanarak, daha sonra başka bir kullanıcı tarafından aynı dosyaya uygulanabilen bir düzeltme eki oluşturabilirsiniz:
    $ Diff -u file1 file2

    -R seçeneğini kullanmak için uygun klasördeki birden fazla dosyayı işlemek için:
    $ Diff -r ~ / tmp1 ~ / tmp2

    Kolaylık sağlamak için, yardımcı programın çıkışını derhal dosyaya yönlendirebilirsiniz:
    $ Diff -u file1 file2\u003e file.patch

    Gördüğünüz gibi, her şey çok basit. Ama çok uygun değil. Grafik araçları kullanmak daha hoş.

    Linux dosyalarının GUI ile karşılaştırılması

    Linux'daki dosyaları grafiksel bir arayüzde karşılaştırmak için birkaç mükemmel araç var. Onları nasıl kullanacağınızı kolayca çözebilirsiniz. Birkaç tanesine bakalım:

    1. Kompare.

    Kompare, diff ile çalışmak için, dosyalardaki farklılıkları bulmanıza ve bunları birleştirmenize olanak sağlayan bir grafik yardımcı programdır. QT'de yazılmıştır ve öncelikle KDE'de tasarlanmıştır. İşte ana özellikleri:

  • Birden fazla fark formatı için destek;
  • Linux dosyasının ve dizinlerin desteklenmesi;
  • Diff dosyalarını görüntülemek için destek;
  • Özelleştirilebilir arayüz;
  • Dosyalara yamalar oluşturun ve uygulayın.

2. Diffmerge.

Diffmerge, dosyaları karşılaştırmak ve birleştirmek için çapraz platform programlarıdır. İki veya üç dosyayı karşılaştırmanızı sağlar. Anında düzenleme satırlarını destekler.

Özellikleri:

  • Katalog Karşılaştırma Desteği;
  • Dosya Görüntüleyici ile entegrasyon;
  • Özelleştirilebilir.

3. Meld.

Bu, dosyaları karşılaştırmak ve birleştirmek için hafif bir araçtır. Dosyaları, dizinleri ve ayrıca sürümler kontrol sistemlerini yapmanızı sağlar. Program geliştiriciler için oluşturulur ve özelliklere sahiptir:

  • İki ve üç dosyanın karşılaştırılması;
  • Özel Tipler ve Kelimeler Kullanma;
  • Otomatik birleşme modu ve metin tarafı ile eylem;
  • Git, Mercurial, Subversion, Bazar ve daha fazlasını destekleyin.

4. dağınık

Diffüz, dosyaları karşılaştırmak ve birleştirmek için bir başka popüler ve oldukça basit bir araçtır. Python'da yazılmıştır. İki ana özellik desteklenir - dosya karşılaştırması ve sürüm yönetimi. Görüntüleme sırasında dosyaları doğrudan düzenleyebilirsiniz. Ana fonksiyonlar:

  • Vurgulama Sözdizimi;
  • Uygun navigasyon için kısayol tuşları;
  • Sınırsız İptal Desteği;
  • Unicode desteği;
  • Git, CVS, Darc, Mercurial, RCS, Subversion, SVK ve Monoton Destek.

5. xxdiff.

XXDiff, dosyaları karşılaştırmak ve birleştirmek için ücretsiz ve çok güçlü bir araçtır. Ancak programın birkaç eksi var. Bu, Unicode Destek ve Dosyaları Düzenleme eksikliğidir.

Özellikleri:

  • Bir veya iki dosya ve dizinin yüzeyi veya özyinelemeli karşılaştırması;
  • Farklılıkların aydınlatılması;
  • Etkileşimli Birlik;
  • GNU Diff, SIG Diff, ClearedDiff ve çok daha fazlası gibi dış karşılaştırma araçları desteği;
  • Komut dosyalarıyla genişletilebilirlik;
  • Özelleştirilebilirlik.

6. KDIFF3.

KDIFF3, Masaüstü KDE ile çevrili dosyaları karşılaştırmak için başka bir mükemmel, ücretsiz bir araçtır. KDevelop programına dahil edilmiştir ve Windows ve MacOS da dahil olmak üzere tüm platformlarda çalışır. İki ya da üç için iki Linux dosyasını karşılaştırabilir veya hatta dizinleri karşılaştırabilirsiniz. İşte ana özellikler:

  • Farklılık çizgisini gösterme ve hakim;
  • Otomatik Gösteriye Destek;
  • Birleşme Sırasında Çatışma İşleme;
  • Unicode desteği;
  • Farkları göster;
  • El hizalama desteği.

), karşılaştırmaları ve GUI müşterilerinin kendileri için karşılaştırmalarının yanı sıra. Git ve Mercurial ile çalışmak için eklentilerin tartışmaları da vardı. Ama pratik olarak bilgi yoktu Görsel karşılaştırma ve çatışma çatışmalarının izninin araçlarında.

Son zamanlarda, MERCURIAL (hala daha uygun ve mantıksal olarak görüyor), gittiği için "yeniden düzenlendi), çünkü ilgilendiğim projelerin büyük çoğunluğu, GitHub'da git ve barındırılan. Bu bağlamda, soru, özellikle konuyla ilgili aracın revizyonu hakkında ortaya çıktı. takım seçimi Görsel karşılaştırma ve birleşme (fark ve birleştirme). Habré hakkında bilgi eksikliğini doldurmak için bu mini incelemeyi yazmaya karar verdim. Söyledikleri gibi - sıcak uyanmalar.

Kedinin altında, Windows altında Diffmerge ve WinMerge ile kullanım için GIT ayarlarının örneklerini de bulacaksınız. Birçoğu zamandan tasarruf edeceğini düşünüyorum.

İsim vermek Özellikleri Platform

Kdiff3.

Git ve winmerge.

1) Dizine ekleyin c: / GIT / LIBEXEC / GIT-CORE / Mergetools /
Dosya WinMerge aşağıdaki gibidir:

Diff_cmd () ("C: / program dosyaları (x86) /winmerge/winmergeu.exe" \\ "$ local" "$ uzaktan"\u003e / dev / null 2\u003e & 1) merge_cmd () ("C: / Program Dosyaları ( x86) /winmerge/winmergeu.exe "\\" $ PWD / $ Yerel "" $ PWD / $ Remote "" $ PWD / $ birleştirildi "\u003e / dev / null 2\u003e & 1 status \u003d $?)
Git, değişiklikleri otomatik olarak birleştiremediğinde, çakışan dosyaya çakışmayı ve çelişkili dosyayı birleştirin (füzyon işaretleri eklenir (<<<<<<<, =======, и >\u003e\u003e\u003e\u003e\u003e\u003e). Üçüncü taraf araçları kullanarak çatışmayı çözmek için gereklidir.
Dosyayı düşünün readme.txt dalların birleştirilmesinin bir sonucu olarak oluşur usta ve yeni. Yukarıdaki örnekte:

<<<<<<< HEAD master str ======= new str >\u003e\u003e\u003e\u003e\u003e Yeni
Çatışmayı çözmek için WinMerge programını kullanarak çatışma dosyasını açabiliriz.

Bundan sonra, iki yönlü birleştirme aracı açılacak:

Açıklanan mantığa dayanarak, birleşme ekibini yeniden yazın merge_cmd. Aşağıdaki şekilde:
merge_cmd () ("C: / program dosyaları (x86) /winmerge/winmergeu.exe" \\ "$ birleştirilmiş"\u003e / dev / null 2\u003e & 1 status \u003d $?)
Özünde, yukarıdaki seçeneklerin her ikisi de eşdeğerdir.

2) düzenleme .gitconfig
Aracı \u003d winmerge cmd \u003d "winmerge" aracı \u003d winmerge cmd \u003d "winmerge" trustexitcode \u003d false cutbackup \u003d false
Son satır, depo dizininde yedekleme dosyalarını kurtarır.

3) İki şubeyi birleştirirken bir çakışma oluşturun (bkz. Diffmerge kullanarak örneğe bakınız).
Git difftool usta yeni // iki şubeyi karşılaştırın

Şubeleri birleştirirken çatışmayı çözmek için ekibi kullanıyoruz
Git mergetool.

Linux'taki iki veya daha fazla dosyayı karşılaştırmak için bir diff komutu var. Karşılaştırabilir ayrı dosyalarıve kataloglar. Sözdizimini, diff komutunun seçeneklerini ve çoklu kullanım örneklerini düşünün.

Diff takım sözdizimi

Diff komutu aşağıdaki sözdizimine sahiptir:

Diff [Seçenekler] Dosyalar veya Dizin

Seçenekleri belirtiriz ve karşılaştırmamız gereken iki veya daha fazla dosya veya dizin göndeririz.

Seçenekler Differ ekibi

Diff komutunun ana seçeneklerini düşünün. Sadece kendimi en sık kullandığım seçenekleri düşüneceğim.

-E.sekme sembolünü metinde ekleme ile ilgili değişiklikleri yoksayın.
-b.boşluk eklenmesiyle ilgili değişiklikleri yoksay.
-w.boşluk ve sekmelerin eklenmesiyle ilgili değişiklikleri yoksayın.
-B.yeni boş dizeleri yoksay.
-P (veya -Show-C işlevi)değişiklikleri bulunan C işlevi fonksiyonunun adını gösterin.
-y (ya da yan yana)ekran iki sütunla sonuçlanır.
-r.rehberleri tekrar gözden geçirin.
-X dosyasıadları dosya dosyasındaki şablonlarla eşleşen dosyaları araştırmak.
-d (veya -Minimal)mümkün olduğunca az değişiklikler bulmaya çalışın (yani yanlış yanıtları ortadan kaldırır).

Differ ekibini kullanma örnekleri

İki metin dosyasının karşılaştırılması

İki metin dosyasının MyFile1 ve MyFile2 adları ile basit bir karşılaştırılması için, komutu terminalde çalıştıracaksınız:

Diff myfile1 myFile2.

Diff komutunun çıktısı, difleme uzantısıyla dosyaya yönlendirmek için uygundur. Çoğu metin editörleri Linux'ta örneğin GEDIT, bu dosyayı tanır ve sözdizimini vurgulayın. Değişikliklerin karşılaştırmasının sonucunu göndermek için. DIFF dosyasının akış yönlendirme sembolünü (\u003e) kullanmanız gerekir:

Diff MyFile1 MyFile2\u003e Değişiklikler.diff

Metin dosyalarını içeren dizinin karşılaştırılması

İçeriği iki dizin (mydir1 ve mydir2) karşılaştırmanın bir örneğini düşünün. metin dosyaları. Yukarıdaki örnekte bulunan ana fark, dizilerindeki dosyaların özyinelemeli baypasının yanı sıra -R seçeneğini ekleyeceğimizdir.

Diff -r mydir1 mydir2\u003e değişiklikler.

Şimdi, dosyaları karşılaştırdığımız dizinlerde, karşılaştırmamız gereken bir sürü "çöp" olduğunu varsayalım. Hariç tutulan dosyayı oluşturun ve karşılaştırmamız gereken şablonları ve dosya adlarını yazın. Örneğin, dışlamaların içeriği şöyle olabilir:

* .o changelog * * .bak * .exe

Artık, DIFF komutunu, dizinleri karşılaştırırken hariçğtük dosyalarımızı kullanacak şekilde belirleyeceksiniz:

Diff -r -x hariç, mydir1 mydir2\u003e değişiklikler.diff

Böylece, örneğin Vasya.exe veya Changelog12'nin hariç tutulması dosyasındaki şablonların altına girmeyen dosyaları karşılaştırırız.

Karşılaştırma sonucunu iyileştirmek için yukarıda açıklanan birkaç seçenek ekleyin:

Diff-rwbd -x hariç mydir1 mydir2\u003e değişiklikler.diff

Mydir1 ve mydir2 dizinlerdeki dosyaları, boş teller, boşlukların, sekmelerin eklenmesiyle ilgili değişiklikleri görmezden gelinir ve gereksiz dosyaları karşılaştırmak için hariç tutmak için dış mekanlarda dosya adı şablonları kullanın.

Sonuç

DIFT komutunun nasıl kullanılacağı hakkında daha fazla bilgi için linux sistemi Komutu çalıştırarak alabilirsiniz:

Adam fark.

Kullanarak dosyaları karşılaştırmanıza izin veren programlar da vardır. grafik arayüzü. Örneğin, dosyalarda nerede ve neyin değiştiğini gösteren MELD programı.



Linux terminalindeki iki dosyanın karşılaştırılması (6)

İşte bunun için çözümüm:

MKDIR TEMP MKDIR SONUÇLARI CP / USR / PAYLAŞ / AMERİKAN-İngilizce-Türkçe ~ / Sıcaklık / Amerikan-Türkçe-sözlük CP / usr / share / dict / İngiliz-İngilizce ~ / Temp / İngiliz-İngilizce-Türkçe-İngilizce-Türkçe-İngilizce-Türkçe Cat ~ / Temp / amerikan -İngilizce-Sözlük | WC -L\u003e ~ / Sonuçlar / Sayım-Amerikan-İngilizce-Türkçe-Sözlük Cat ~ / Temp / İngiliz-İngilizce-Türkçe | WC -L\u003e ~ / Sonuçlar / Sayısı-İngiliz-İngilizce-Türkçe-Sözlük GREP -FXF ~ / Sıcaklık / Amerikan-İngilizce-Türkçe ~ / Temp / İngiliz-Sözlük\u003e ~ / Sonuçlar / Common-İngilizce GREP -FXVF ~ / Sonuçlar / Common-Türkçe ~ / Sıcaklık / amerikan-Türkçe-sözlük\u003e ~ / sonuçlar / benzersiz-american-ingilizce grep -fxvf ~ / Sonuçlar / Common-Türkçe ~ / Temp / İngiliz-İngilizce-Türkçe\u003e ~ / Sonuçlar / Benzersiz-İngiliz -İngilizce

Adlandırılmış iki dosya var "A.txt" ve "B.txt", hangi kelimelerin bir listesidir. Şimdi hangi kelimelerin eklendiğini kontrol etmek istiyorum. "A.txt" ve içinde değil "B.txt" .

İki kelime hazinesini karşılamam gereken etkili bir algoritmaya ihtiyacım var.

İki dosyayı karşılaştırmak için Linux'taki diff aracını kullanabilirsiniz. Gerekli verileri filtrelemek için kullanabilirsiniz seçenekler --Changed-Grup Formatı ve - Punchanged-Grup Formatı .

Her seçenek için uygun grubu seçmek için aşağıdaki üç seçenek kullanılabilir:

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

    "%\u003e" Dosya2'den satır alır

    "" (Boş dize) Her iki dosyadan da satırları silmek için.

Örneğin: fARK --Changed-Group-Format \u003d "%<" --unchanged-group-format = "" file1.txt file2.txt

[TMP] # cat file1.txt test bir test iki test üç test dört test sekiz [tsp] # cat file2.txt test bir test üç test dokuz [tmp] #ff --changed-grup-format \u003d "%<" --unchanged-group-format="" file1.txt file2.txt test two test four test eight

Git Diff'ten farklı diff çıkış stilini tercih ederseniz, Git deposunda olmayan dosyaları karşılaştırmak için --No-index bayrağı ile kullanabilirsiniz:

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

Her biri 200 bin dosya adı satırlarıyla bir dosya dosyası kullanarak, (yerleşik zaman komutu ile) bu yaklaşımı ve diğer bazı cevapları burada karşılaştırdım:

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 bugün en hızlı gibi görünüyor, Git Diff --No-index, FARK tarzı için en hızlı yaklaşım gibi görünüyor.

Güncelleme 2018-03-25 Gerçek Git deposunda değilseniz ve bu depodaki tekrarlanabilir olmayan dosyaları karşılaştırmak isterseniz --No-index bayrağını atlayabilirsiniz. Man sayfalarıyla:

Bu form, dosya sistemindeki iki yolun verilerini karşılaştırmak için tasarlanmıştır. Çalışma ağacındaki komutu çalıştırırken, GIT tarafından kontrol edilen, GIT tarafından kontrol edilen ve işler dışındaki yollardan veya komutun çalışma ağacının dışına başladığında, GIT tarafından yönetildiğinde, -No-index parametresini atlayabilirsiniz.

Comm -13 kullanın. (Sıralanmış dosyalar gereklidir) :

$ Cat File1 Bir İki Üç $ Kedi File2 Bir İki Üç Dört $ Comm -13<(sort file1) <(sort file2) four

Onları sıralayın ve volt kullanın:

Comm -23.<(sort a.txt) <(sort b.txt)

comm Karşılaştırır (Sıralar) Giriş dosyalarını ve varsayılan olarak üç sütunu görüntüler: A'ya benzersiz çizgiler, B'ye özgü çizgiler ve her ikisinde de mevcut olan satırlar. -1, -2 ve / veya -3'ü belirlerken, karşılık gelen çıkışı bastırabilirsiniz. Bu nedenle, COMP -23 AB, yalnızca A'ya benzersiz kayıtları listeler. Sözdizimini kullanıyorum<(...) для сортировки файлов на лету, если они уже отсортированы, вам это не нужно.

bir vim yüklü varsa, aşağıdakileri deneyin:

Vimdiff File1 File2.

Vim -d file1 file2

fantastik bulacaksın.

), karşılaştırmaları ve GUI müşterilerinin kendileri için karşılaştırmalarının yanı sıra. Git ve Mercurial ile çalışmak için eklentilerin tartışmaları da vardı. Ama pratik olarak bilgi yoktu Görsel karşılaştırma ve çatışma çatışmalarının izninin araçlarında.

Son zamanlarda, MERCURIAL (hala daha uygun ve mantıksal olarak görüyor), gittiği için "yeniden düzenlendi), çünkü ilgilendiğim projelerin büyük çoğunluğu, GitHub'da git ve barındırılan. Bu bağlamda, soru, özellikle konuyla ilgili aracın revizyonu hakkında ortaya çıktı. takım seçimi Görsel karşılaştırma ve birleşme (fark ve birleştirme). Habré hakkında bilgi eksikliğini doldurmak için bu mini incelemeyi yazmaya karar verdim. Söyledikleri gibi - sıcak uyanmalar.

Kedinin altında, Windows altında Diffmerge ve WinMerge ile kullanım için GIT ayarlarının örneklerini de bulacaksınız. Birçoğu zamandan tasarruf edeceğini düşünüyorum.

İsim vermek Özellikleri Platform

Kdiff3.

Git ve winmerge.

1) Dizine ekleyin c: / GIT / LIBEXEC / GIT-CORE / Mergetools /
Dosya WinMerge aşağıdaki gibidir:

Diff_cmd () ("C: / program dosyaları (x86) /winmerge/winmergeu.exe" \\ "$ local" "$ uzaktan"\u003e / dev / null 2\u003e & 1) merge_cmd () ("C: / Program Dosyaları ( x86) /winmerge/winmergeu.exe "\\" $ PWD / $ Yerel "" $ PWD / $ Remote "" $ PWD / $ birleştirildi "\u003e / dev / null 2\u003e & 1 status \u003d $?)
Git, değişiklikleri otomatik olarak birleştiremediğinde, çakışan dosyaya çakışmayı ve çelişkili dosyayı birleştirin (füzyon işaretleri eklenir (<<<<<<<, =======, и >\u003e\u003e\u003e\u003e\u003e\u003e). Üçüncü taraf araçları kullanarak çatışmayı çözmek için gereklidir.
Dosyayı düşünün readme.txt dalların birleştirilmesinin bir sonucu olarak oluşur usta ve yeni. Yukarıdaki örnekte:

<<<<<<< HEAD master str ======= new str >\u003e\u003e\u003e\u003e\u003e Yeni
Çatışmayı çözmek için WinMerge programını kullanarak çatışma dosyasını açabiliriz.

Bundan sonra, iki yönlü birleştirme aracı açılacak:

Açıklanan mantığa dayanarak, birleşme ekibini yeniden yazın merge_cmd. Aşağıdaki şekilde:
merge_cmd () ("C: / program dosyaları (x86) /winmerge/winmergeu.exe" \\ "$ birleştirilmiş"\u003e / dev / null 2\u003e & 1 status \u003d $?)
Özünde, yukarıdaki seçeneklerin her ikisi de eşdeğerdir.

2) düzenleme .gitconfig
Aracı \u003d winmerge cmd \u003d "winmerge" aracı \u003d winmerge cmd \u003d "winmerge" trustexitcode \u003d false cutbackup \u003d false
Son satır, depo dizininde yedekleme dosyalarını kurtarır.

3) İki şubeyi birleştirirken bir çakışma oluşturun (bkz. Diffmerge kullanarak örneğe bakınız).
Git difftool usta yeni // iki şubeyi karşılaştırın

Şubeleri birleştirirken çatışmayı çözmek için ekibi kullanıyoruz
Git mergetool.