Tam bir dizin yapısını karşılaştırmak (diff) için en iyi yol?


29

Dizin yapılarını karşılaştırmanın en iyi yolu nedir?

Rsync kullanan bir yedekleme yardımcı programım var . Kaynak ve yedekleme arasındaki kesin farkları (dosya boyutları ve son değiştirilme tarihleri ​​açısından) söylemek istiyorum.

Gibi bir şey:

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT

Tabii ki, araç hazır veya bir python betiği için bir fikir olabilir.

Çok teşekkürler!

Udi

Yanıtlar:


18

Aradığınız araç rdiff . Rsync ve diff'i birleştirmek gibi çalışır. Karşılaştırabileceğiniz veya dağıtabileceğiniz bir yama dosyası oluşturur.


9

Bazı insanlar dosya sistemlerini farklı nedenlerle karşılaştırmak istiyor, bu yüzden buraya istediğimi ve nasıl yaptığımı yazacağım.

İstedim:

  • Karşılaştırmak aynı dosya sistemi kendisiyle, yani anlık , yapmak değişiklikleri , enstantane , karşılaştırın .
  • Hangi dosyaların eklendiğini veya kaldırıldığını gösteren bir liste, iç dosya değişiklikleriyle ilgilenmiyordu.

Ben ne yaptım:

İlk anlık görüntü ( before.shscript):

find / -xdev | sort > fs-before.txt

İkinci anlık görüntü ( after.shkomut dosyası):

find / -xdev | sort > fs-after.txt

Bunları karşılaştırmak için ( diff.shscript):

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

Bunun iyi yanı, bunun hemen hemen varsayılan sistem ikili dosyaları kullanmasıdır. İçeriğe göre karşılaştırılması , dosya yolunu ve bundan sonra bir MD5'i ekleyen findbir -execparametre geçirilerek yapılabilir .


8

Başka bir araç yüklemek istemiyorsanız ...

for host in host1 host2
do
  ssh $host ' 
  cd /dir &&
  find . |
  while
    read line
  do
    ls -l "$line"
  done ' | sort  > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"

Ve evet, bul ve çalıştır veya bul ve xargs ile bir for döngüsünde kolayca bulunabiliyordu. Ve ayrıca, diff'in çıktısını kaldırabilirsiniz, böylece "bu dosya host1'de ama host2'de değil" gibi şeyler ya da böyle bir şey olabilir ama bu noktada herkesin bahsettiği araçları da kurabilirsiniz ...


5

Dizin yapılarını karşılaştırmak için geçmişte dirdiff kullandım . Yalnızca yerel dizinlerde çalışır, böylece sshfsdiğer dizinlerinizi takmak zorunda kalırsınız .

İşin iyi yanı, dosyaların eşit olup olmadığını ve hangisinin daha yeni veya daha eski olduğunu görsel olarak görebilmenizdir. Ve 5 dizine kadar destekler. Farklılıkları görebilir ve dosyaları birinden diğerine kopyalayabilirsiniz.


4

Rsync man sayfasından:

-n, --dry-run
This  makes rsync perform a trial run that doesn’t make any changes (and produces mostly
the same output as a real run).  It is most commonly used in combination  with  the  -v,
--verbose  and/or -i, --itemize-changes options to see what an rsync command is going to
do before one actually runs it.

Belki bu yardımcı olur.


Teşekkürler, ama sorunumu çözmüyor (farkları söylemek için zorluğu arıyorum).
Adam Matan

4

diff -raslında oldukça iyi çalışıyor. Dosyaların farklılık gösterip göstermediğini bilmek istiyorsanız, farklılıkların asıl içeriğini değil, o zamandiff -qr


1
-rözyinelemeli demektir, uzaktaki bir ana bilgisayara bağlanmaz!
Michael Hampton

3

Bunun için Meld kullanırdım.


Bir GUI çözümü istiyorsanız Meld bunun için gerçekten iyi çalışıyor.
Drew No:

2

Pencerelerde daha önce belirtilen araçların yanı sıra, Total Commander veya WinSCP kullanabilirsiniz, her ikisi de dizinleri karşılaştırmak (ve senkronize etmek) için çok rahat fonksiyonlara sahiptir.


0

Gerçekten yeni bir şey yüklemek istemedim, bu yüzden çözümüm biraz kaba, ancak hızlı ve etkili.

Tüm dosyaları kopyalamak ve dosya modları, sahiplik ve SELinux güvenlik bağlamı işaretlenmeden kalmayı karşılaştırmak istedim.

Bu yüzden koştum:

rsync -aX /orig /copy/

ve sonra şöyle karşılaştırın:

cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*

Her iki dosyanın da içeriği hala çöküyorsa, aynıdırlar. Aksi takdirde, fark gösterilir.

lsKontrol etmeniz gereken özellikleri yansıtmak için parametrelerini güncelleyin . YMMV

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.