OSX'te karma dosya arama dosyası


14

OSX (Maverick ama daha genel olarak OSX) içinde belirli bir dosyayı aramak için bir yol arıyorum. Özellikle aşağıdakileri yapmak istiyorum:
verilen bir File_001 dosya sisteminde bu dosyanın bir kopyası olup olmadığını aramak istiyorum.
Sadece aynı adla değil, karşılaştırma yönteminin MD5, SHA vb.Gibi bir karma algoritması olmasını istiyorum.

Denedim "yinelenen dosya bulucu" çoğu sadece bir sürücü / sistem tüm yinelenenleri aramak için. Bunun yerine, bir dosya göndermek ve kopyalarını aramak isterim.

Böyle bir programın olup olmadığını bilen var mı? Belki Spotlight'ın belirsiz bir fonksiyonu?


1
Belirli bir dosyanın bir kopya olup olmadığını belirleyen karma değerine dikkat edin. Bu yaklaşım, örneğin .emlx dosyalarıyla (Apple Mail'in dosya biçimi) başarısız olabilir. Spotlight'a bir yardım olarak OSX, posta dosyalarına meta veriler ekler. Message-id aynı olsa bile, iki farklı yoldaki aynı e-postada farklı meta veriler olabilir. Aynı ham e-postayı içeren iki dosya için farklı karma.
John

Yanıtlar:


17

Ayrıca kullanabilirsiniz fdupes. Belirli bir dosyanın kopyalarını arama seçeneği yoktur, ancak çıktıyı dosya adı için grep edebilirsiniz:

fdupes -r1 .|grep filename

-rdizinlere geri döner ve -1her yinelenen dosya grubunu tek bir satıra yazdırır.

Diğer faydalı örnekler:

fdupes -r . geçerli dizinin altındaki tüm yinelenen dosyaları bulur;

fdupes -r . -dN her kopya grubundan ilk kopya hariç tüm kopyaları siler;

fdupes -r dir1 dir2|grep dir1/|xargs rmiçindeki kopyaları kaldırır dir1.

Sen yükleyebilir fdupesile brew install fdupes.


1
Geçerli dizinde yinelenmeyen bir dosya listesine sahip olmak mümkün müdür?
gagarine

7

Bunu bazı kabuk komutlarıyla kolayca kendiniz oluşturabilirsiniz:

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    tüm dosyalarınızda md5 karmalarının bir listesini oluşturur.

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    FILE-TO-SEARCH'ın md5 karmasını arayacak

İlk komutu çalıştırmak (özellikle diskin tamamını çalıştırıyorsanız) uzun sürecektir.


Yalnızca bir dosya aramak istiyorsanız,

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done

İlk geçiş tam boyuta göre bir işlem olmalıdır.
Ocak'ta biziclop

@biziclop Sadece bir dosya aramak istiyorsanız, evet. Birkaç tane aramak istiyorsanız, dizini bir kez oluşturmak ve daha sonra dizin dosyasında arama yapmak daha hızlıdır.
nohillside

1
Elbette bu şu cümleyi fark ettim: "Bunun yerine, bir dosya göndermek ve kopyalarını aramak isterim."
Ocak'ta biziclop

fdupes önce tarih karşılaştırması, sonra kısmi karma, sonra tam karma yapmak daha hızlı olmalıdır.
gagarine

1

Komutun içine FILE_001 için boyutu ve karmayı koyarsanız, bu işlem işe yarayacaktır.

198452 bayt kullandığım dosya boyutu ve md5 hash dosyası 3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

Çıktı, find komutuna gönderilen dizine göre yol adlarına sahip dosyaların bir listesi olacaktır.

Bu yaklaşımın avantajı, yalnızca orijinalinizin boyutuyla eşleşen karma dosyaları ve yalnızca karma ile eşleşen dosya adlarının çıktısını almasıdır.


0

Komut dosyalarıyla uğraşmak istemiyorsanız , Mac App Store'da Araxis Duplicate Files 10 $ Bulmak istediğiniz davranışa yaklaşabilirsiniz . Ayrıca web sitelerinde 7 günlük bir demo bulunmaktadır. Yinelenen Dosyaları Bul, her dosya için karmayı hesaplayarak dupleri arar.

İlgilendiğiniz tek bir dosya ile bir klasör oluşturmak istediğiniz davranışı yaklaşık olarak belirleyebilir, ardından aramak istediğiniz klasörleri ekleyebilirsiniz. Bu, arama yollarında varsa diğer yinelemeleri de bildirir.

Bu uygulama sonuçları çok kolay anlaşılır hale getiren birçok güzel sıralama özellikleri vardır.

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.