Dizinler arasındaki farklar nasıl karşılaştırılır (linux)


24

İki dizinim var - biri önceki yedeklemeden diğeri de en yeni yedeklemeden. Dizindeki dosyalarda hangi değişikliklerin yapıldığını Linux'daki en yeni yedeklemeyle nasıl karşılaştırabilirim? Ayrıca, örneğin metin ve php dosyalarındaki değişiklikleri nasıl gösterebilirim - ekranın bir tarafında eski sürümü, diğerinde ise en yeni sürümü gördüğünüz ve değişikliklerin vurgulandığı wikipedia'daki revizyon tarihi gibi bir şeyi düşünüyorum. Böyle bir şeyi nasıl başarabilirim?

düzenleme: nasıl uzak dir yerel yerel karşılaştırabilirim ?

Yanıtlar:


35

Diff man sayfasından:

Hem dosyadan hem de dosyaya dizinlerse, diff her iki dizindeki karşılık gelen dosyaları alfabetik sırayla karşılaştırır; -r veya - recursive seçeneği belirtilmediği sürece bu karşılaştırma özyinelemeli değildir. diff hiçbir zaman bir dizinin gerçek içeriğini bir dosya gibi karşılaştırmaz. Tam olarak belirtilen dosya standart giriş olmayabilir, çünkü standart giriş isimsizdir ve '' aynı isimde dosya '' kavramı geçerli değildir.

Yani dizinleri karşılaştırmak için: diff --brief -r dir1 dir2

Dosyaları yan yana karşılaştırmak için: diff --side-by-side file1 file2


çok güzel, bir deneyeceğim
Phil

uzak dizini yerel dizinle nasıl karşılaştırabilirim?
Phil

1
Uzak dizini yerel makineye takmanız gerekir. Ancak, uzaktan bu gibi dosyaları karşılaştırabilirsiniz: ssh REMOTE_SERVER "cat / path / to / some / file" | diff - side-by-side / path-to-some-file - Başka bir şey ise, 'sdiff' komutu 'yazarak kaydetmek için' diff - side-by-side 'gibi çalışır.
Sean Staats

2
Uzak dizini bağlamak için NFS kullanın. Uzak sunucuda (server-b), / etc / export komutunu düzenleyin ve içine şunu koyun: / path / / / dizin / / / server_a.ip.adresi (ro, no_root_squash) server-b'de NFS'yi başlatın. (/etc/init.d/nfs start) Aşağıdakileri / etc / fstab dizinine ekleyerek yerel sunucunuza (server-a) bağlanın: server-b.ip.add: / path / of / directory / / / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Daha sonra server a, mkdir / mnt / server-b; mount / mnt / server-b Güncellemeler için teşekkürler.
Sean Staats

2
sshfsNFS kullanmak yerine geçici bir geçici ağ dizini oluşturmak için kullanabilirsiniz .
Dan Andreatta

3

varsayarsak:

  • Üzerinde olan www1uzaktan kumanda ile karşılaştırarak,www2
  • Yerelden www1uzaktaki herkese açık Anahtar kimlik doğrulaması varwww2
  • yerel www1ve uzaktaki kullanıcılarla aynı kullanıcıyı karşılaştırıyoruzwww2
find / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / exclude_this dir"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / exclude_this dir> remote.md5"
scp www2: uzak.md5.
uzak local.md5 uzak.md5 

3

rsyncBant genişliği tüketimini azaltma gücünü, diffsize esneklik sağlama gücü ile birleştirmek istiyorsunuz .

Yani böyle bir şey:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

Sanırım ilk satır rsyncyerine sık sık kullanıyorsanız, bunu biraz değiştirebiliyorsunuz cp- açıkçası son satırda istediğiniz gibi diffbiçimlendirmek için tam bir gücünüz var . OPs durumunda muhtemelen y ile

Bu yaklaşımın dezavantajı, iki kat daha fazla yerel alan kullanmanız, ancak kimin umrunda 1 dolardan az bir miktar kullanmanız?


cp --reflink=auto --sparse=alwaysaltta yatan FS'ye bağlı olarak kopya için boşluk kullanmamak.
Tom Hale,

1

Do diff old_dir new_dir > diff.txtaynı sunucuda yan farklılıklardan tarafı için.

Uzak dosyalar için:

Örneğin: ABC var olan sunucudur ve XYZ uzaktaki sunucunuzdur ve dizin adı 123'tür.

Adım 1: ABC Sunucusu'ndaki mevcut dizin 123'ü 123_ABC olarak yeniden adlandırın.

ABC:/Home > mv 123 123_ABC

Adım 2: ABC sunucusunda yeni bir dizin oluşturun:

ABC: > mkdir 123_XYZ

Adım 3: Tüm dosyaları XYZ sunucusu üzerindeki 123 dizininden ABC sunucusu üzerindeki 123_XYZ dizinine kopyalayın:

XYZ/123 > scp * userid@ABC: /123_XYZ

Bu, tüm dosyaları XYZ sunucunuzdaki dizinden ABC sunucunuza / 123_XYZ dizininize kopyalar.

Adım: 4: Her iki dizin arasındaki farkı yapın:

Şimdi ABC sunucusuna gidin ve 123_ABC ve 123_XYZ arasında fark gerçekleştirin

ABC > diff 123_ABC 123_XYZ > diff.txt

Yukarıdaki komut, diff sonuçlarını sonuçta diff.txt dosyasına kaydeder.

Daha sonra farklılıkları karşılaştırabilirsiniz.

Teşekkür ederim,

Mehul


0

AIDE Gelişmiş İzinsiz Giriş Tespit Ortamı (AIDE), UNIX işletim sistemleri için bir dosya bütünlüğü denetleyicisidir. Desteklenen dosya sistemlerindeki verilerin bütünlüğü hakkında raporlama sağlama amacı. AIDE'yi hedef ana bilgisayarda birden çok kez çalıştırarak, hangi dosyaların değişeceğini belirleyebilirsiniz. AIDE'yi farklı ana bilgisayarlarda birçok kez çalıştırarak, hangi dosyaların ve izinlerin farklı olduğunu belirleyebilirsiniz. Sonra bildirilen "farklı" dosyalar üzerinde bir gui diff aracı kullanın.

Veya meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff veya xxdiff gibi bir gui diff aracı kullanın. Çoğu dosya diffs ek olarak dizin diffs yapacaktır. Diğerlerinin dediği gibi, uzak sürücüyü NFS, SMBFS veya SSHFS kullanarak monte etmeniz gerekecektir.


0

Ya da iki dosyayı kullanarak dosya listesi çıkar. Ve sonra bu iki dosyayı karşılaştırın. Örneğin:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

Dosyalardan birini indirin.

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 DOSYA.TXT  

dosyaya.

diff -y remote-files local-files > diff-filesOnları yan yana karşılaştırmak için diff ( ) kullanın . Farklı dosyaları açın ve kontrol edin. > İle her satır farklı bir dosya anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.