Bir klasördeki hangi dosyaların başka bir klasörde eksik olduğunu kontrol edin?


2

Fotoğrafları çeşitli kaynaklardan ana arşivime kopyalarken, yalnızca arşivde olmayan dosyaları kopyalamak istiyorum. WinMerge ve Meld gibi uygulamaları karşılaştıran rsync veya dosya, bir dosyanın zaten farklı bir isimde veya farklı bir alt klasörde olup olmadığını kontrol edemez. Önce tüm yeni kaynak resimlerin arşive kopyalanması, daha sonra kopyaların silinmesi ve ardından dosyaların düzenlenmesi fazladan iş gibi görünüyor.

Bir kaynak klasördeki hangi dosyaların hedef klasörde hiçbir yerde bulunmadığını kontrol etmenin bir yolu varsa? Alt klasörler de kontrol edilmelidir. Dosya farklı bir ad veya farklı bir konuma sahip olabilir.


Hedefiniz farklı adlardaki ama aynı içeriğe sahip farklı bir konumdaki dosyaları içeriyorsa , ilk önce çözmek isteyebileceğiniz tutarlılık sorunlarınız var gibi gözüküyor. Arşivlemeyi çözmek, rahatsızlığı değil, semptomları düzeltmek gibidir. Sadece söylüyorum.
Torben Gundtofte-Bruun

Yanıtlar:


2

Kaynaktaki ve hedefdeki tüm dosyaların sağlama toplamını almak için findile kullanın md5sum, ardından hedeften commeksik olan sağlama toplamlarını bulmak için kullanın .

Veya -yseçeneğini deneyebilirsiniz rsync.


0

Bunun nasıl yapılacağı, resim dosyalarınızın bitsel olarak mı yoksa sadece görsel olarak aynı mı olduğuna (örneğin, farklı yorumlara sahip olmaları veya yeniden sıkıştırılmış olmaları, kırpılmaları ...) olabilir.

Dosyalar aynıysa ve bunları hem kaynakta hem de arşivinizde yeniden adlandırabilirsiniz, her zaman aynı ada sahip olacak şekilde yeniden adlandırmak kolaydır. Eski adı sembolik bir bağlantı olarak tutabilirsiniz. Test edilmemiş:

for orig in *.jpg; do
  canon=$(<"$orig" md5sum | sed 's/ .*//').jpg
  mv -i "$orig" "$canon"
  ln -s "$canon" "$orig"
done

Bu, arşivinizin tek bir dizin olduğunu varsayar. Alt dizinler varsa , komuta doğru miktarda eklemek *.jpgiçin **/*.jpg(bash 4 veya zsh gerektirir) değiştirmeniz gerekir .../ln

Bundan sonra rsync sadece yeni fotoğrafların içeriğini ve ismini ve mevcut fotoğraflar için yeni isimleri kopyalayacaktır.

Dosyaları yalnızca arşivinizde yeniden adlandırabilirseniz, sembolik bağların akıllıca kullanımı ve muhtemelen de bir şeyler düzenleyebilirsiniz rsync --copy-unsafe-links.

Dosyalar sadece görsel olarak birbirine benziyorsa, daha karmaşıktır ve tam otomatik bir cevap olamaz (kırpılmış bir sürüm ile düşük kaliteli bir sürüm arasında, bir insan seçim yapmak zorundadır). Görsel olarak benzer görüntüleri karşılaştırmak için bazı araçlar, örneğin gqview (interaktif) veya findupagedupes (komut satırı) gibi yardımcı olabilir.

İşletim sisteminizi belirtmediğinizden, benim için çalışan önerilerde bulunduğumu unutmayın. OSX ve Cygwin dahil, unix benzeri herhangi bir sistem üzerinde çalışacaklar. Sembolik bağlantı fikri aynı zamanda yerel olarak Windows XP ve daha yeni sürümlerde de çalışacaktır (belki daha erken) ancak ek araçlar kurmayı gerektirir.


0

Tüm " farklı ad veya farklı bir alt klasörde " meselesi çözülmesi biraz zor olabilir ... Bir karma karşılaştırması yapabileceğinizden emin olabilirsiniz, ancak hedef dizininiz büyüdükçe birleştirme yapma süresi artacaktır.

Çok süslü değil, peki ya Windows için Robocopy gibi bir şey kullanmaya ne dersiniz?

robocopy /E source destination
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.