2 sürücüde benzersiz dosyalar bulun


1

Aynı içeriğe sahip, ancak tamamen farklı klasör yapılarında 2 birimi karşılaştırmaya çalışıyorum. (Yaklaşık 2 milyon dosya.)

Hangi dosyaların SADECE 1 klasörde olduğunu görmek istiyorum, diğeri değil - büyüklük & amp; ad.

Bunu denedim:

find /Volumes/1/ /Volumes/2/ -not -empty -type f -printf "%D\t%s\t%f\n" | sort -t$'\t' -k2 -n | uniq -uf1 | sort

Buradaki fikir, aygıt, boyut ve ad ile tüm dosyaların bir listesini almak ve ardından tüm kopyaları kaldırmaktır.

... ama işe yaramıyor. Sonuçta hala her iki sürücüde ortak dosyalar alıyorum.

İdeal olarak, sonuçları listeye tam yolu dahil etmek isterdim, ancak sıralama / birleştirmeyi karıştırmadan bunu nasıl dahil edeceğimi bilmiyorum.


İki dosyanın adını ve boyutunu paylaşıyorlarsa aynı olmalarına güveniyor musunuz, yoksa md5 / sha1 / sha2 doğrulaması gerektiriyor mu?
MariusMatutiae

Güveniyorum ... bir sürücü son zamanlarda diğerlerinden uzak durduğundan, ama artık bir parça karışıklık kalmış. Sadece kopyalanması gereken üzerinde kalan notları arıyorum.
Ze'ev

Yanıtlar:


0

EDIT: cihazın korunması ihtiyacına ilişkin cevap

find dir1/ dir2/ -type f -printf "%D\t%s\t%f\n" | \
    sort -t$'\t' -k2 | \
    uniq -uf2

find /Volumes/1/ /Volumes/2/ -type f -printf "%f\n" | sort | uniq -u sadece dosya isminde eksik olan dosyaları gösterecek

find /Volumes/1/ /Volumes/2/ -type f -printf "%s-%f\n" | sort | uniq -u dosya adı ve büyüklüğüne göre eksik dosyaları gösterecek

Bir boyut uyuşmazlığı varsa, ikinci seçenek dosyaları iki kez verir. İstediğiniz bu değilse, listeyi şu şekilde yeniden doldurabilirsiniz:

find /Volumes/1/ /Volumes/2/ -type f -printf "%s\t%f\n" | sort | uniq -u | \
    cut -d$'\t' -f 2|sort|uniq

Evet, ama sonra dosyaların hangi sürücüden geldiğini bilmiyorum. Temelde sahip olduğum şey bu değildi. %D aygıt için ... Dosyanın hangi birimde bulunduğu hakkında bilgi içeren sonuçlara ihtiyacım var.
Ze'ev

1
@ Ze'ev düzenlediğim cevabı kontrol et. Boyut uyumsuzluğu durumunda yinelenen sonuca ihtiyaç duyup duymadığınız belli değildi.
GnP

-1

-R ile rsync kullanın (tam yolu göstermek için göreceli seçenek)

rsync -rvcnR --delete path_to_sync/ path_to_orig/

Diğer komut satırı r, v, c ve n anahtarları, iki dizinin ayrıntılı, özyinelemeli, sağlama toplamı temelli eşitlemesini gerçekleştirmek için rsync'e (ayrıntılar için kılavuz sayfasını kontrol edin) söyler:

Gönderenin cevabımdan sonra netleştiği ilk rsync işleminden sonra dosya yapısının bozulmasına neden olan dosyaların silinmesine ve hareket etmesine izin vermek için düzenleyin.

bulgunuzu bunun gibi bir şeyle değiştirin

find /Volume/1/ /Volume/2/ -printf '%f %s\t%D%p\n' | sort -uk1,1 | cut -f 2- -d ' '

İstediğiniz alanları izleyen dosya adını kullanarak ilk alanı oluşturmak için printf kullanın, benzersiz dosyalar için bu ilk alana göre sıralayın, sonra benzersiz dosyaları bırakarak alanı 1 silin. Dosya adlarında boşluk kullanıyorsanız, kesme ayırıcısı için kullandığım alana farklı bir sınırlayıcı kullanmanız gerekir.


Bu gerçekten işe yarıyor mu? OP, bt dosyalarının tamamen farklı klasörlerdeki exct olduğunu iddia ediyor.
MariusMatutiae

@MariusMatutiae eğer dosyalar orada rsync ile yerleştirildiyse rsync ile kontrol edilebilirler.
Antony

Daha sonra taşındılar. Görünen kopyaları silmeye, onları Çöp Kutusuna taşımaya başlamıştım, daha sonra bazılarının yanlış tanımlandığını keşfettim, bu yüzden şimdi ilk ciltteki tüm dosyalar büyük bir klasörde. Klasör yapısını görmezden gelen bir 'rsync'e ihtiyacım var. Compare Beyond bunu yapabilir, ancak bu kadar büyük bir işte boğulur.
Ze'ev
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.