Bir dizindeki tüm dosyalar için md5 sağlama toplamı oluştur


75

Bir dizindeki tüm dosyalar için bir md5 sağlama toplamı listesi oluşturmak istiyorum.

Ben istiyorum cat filename | md5sum > ouptput.txt. Bunu dizimdeki tüm dosyalar için 1 adımda yapmak istiyorum.

Herhangi bir yardım çok iyi olurdu.


Belirli bir yedekleme dosyasının md5sum'unu (sağlama toplamı) nasıl bulabilirim?

Yanıtlar:


110

md5sumBirden fazla dosya adı veya bash genişletmesi geçirebilirsiniz :

$ md5sum * > checklist.chk  # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk   # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK

Süslü olmak istiyorsanız find, dosyaları incelemek ve filtrelemek ve tekrarlamalı olarak çalışmak gibi şeyleri kullanabilirsiniz :

find -type f -exec md5sum "{}" + > checklist.chk

1
md5sumSub alt dizinlerin içindeki dosyaları almak için yukarıdakilerin nasıl kullanılacağını, yukarıdaki md5sum *
yayaların

find -type f -exec md5sum '{}' +Çalıştırıp sorduğum için sorduğum için özür dilerim -type f -exec md5sum '{}' `Ben bunu başarabildim. Thanks :)
Kasun Siyambalapitiya

Bu çıktının görünüşünü daha çok tercih ederim:openssl md5 * > checklist.txt
ashley

1
**Özyinelemeli değerlendirmek için mutlu olan bir kabuk kullanıyorsanız (zsh gibi), daha da basit:md5sum **/* 2>/dev/null
Joost

12

Harika bir sağlama toplamı oluşturma / doğrulama programı rhash. SFV uyumlu dosyalar bile oluşturur ve bunları da kontrol eder.

Md4, md5, sha1, sha512, crc32 ve daha pek çoğunu destekler.

Üstelik md5deep veya sha1deep gibi özyinelemeli yaratım (-r seçeneği) yapabilir.

Son fakat en az değil, sağlama toplamı dosyasının çıktısını biçimlendirebilirsiniz; Örneğin:

rhash --md5 -p '%h,%p\n' -r /home/

/homedizini tekrar tekrar başlatarak dosyaların tam yolunu içeren bir CSV dosyası çıkarır .

-E seçeneğinin bile isimlerini crc32 sum ekleyerek dosyaları yeniden adlandırdım.

PhoenixNL72 örneklerinde "md5sum" ifadesini "rhash" ile değiştirebilirsiniz.


1
'/ Home /' burada tam olarak ne yapar? Bu araç oldukça iyi görünüyor.
Andy Ibanez

Bence bu bir hata, kesinlikle benim için hatalar. -P, çıktının biçimidir. Düzelteceğim.
pbhj

7

İşte iki tane daha kapsamlı örnek:

  1. Mutlak yollarla, her dizinde önceden bulunmayan bir md5 dosyası oluşturun:

    find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] &&  md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done 
    
  2. Her klasörde zaten bir tane olmayan bir md5 dosyası oluşturun: yol yok, sadece dosya isimleri:

    find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] &&  md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done 
    

1 ile 2 arasında farklılık gösteren, dosyaların elde edilen md5 dosyasında sunulmasıdır.

Komutlar aşağıdakileri yapar:

  1. Geçerli klasör için dizin adlarının bir listesini oluşturun. (Ağaç)
  2. Klasör listesini sırala.
  3. @ Md5sum.md5 dosyasının var olup olmadığını her dizinde kontrol edin. Varsa Çıktı Atlandı, yoksa Çalışıyor çıktı çıktı.
  4. @ Md5Sum.md5 dosyası mevcut değilse, md5Sum, klasördeki tüm dosyaların sağlama toplamlarını içeren bir tane oluşturur. 5) Oluşturulan @ md5Sum.md5 dosyasını yalnızca okumak için ayarlayın.

Bu betiğin tamamı bir dosyaya (.....; done> test.log) yönlendirilebilir veya başka bir programa (grep gibi) aktarılabilir. Çıktı size yalnızca hangi dizinlerin atlandığını ve hangilerinin işlendiğini söyleyecektir.

Başarılı bir çalıştırmadan sonra, geçerli dizininizin her alt dizininde bir @ md5Sum.md5 dosyası olacak

@ Md5Sum.md5 dosyasını adlandırdım, böylece dizinin en üstünde bir samba paylaşımında yer alacak.

@ @ Md5Sum.md5 dosyalarının doğrulanması bir sonraki komut ile yapılabilir:

find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt

Daha sonra farklı dosyaların bir listesini almak için grep -v OK ile checklog.txt dosyasını silebilirsiniz.

Belirli bir dizinde bir @ md5Sum.md5'i yeniden düzenlemek için, örneğin dosyaları değiştirdiğinizde veya eklediğinizde, @ md5Sum.md5 dosyasını silin veya dosyayı yeniden adlandırın ve gene komutunu yeniden çalıştırın.


Tam yolları kullanarak 1 numaralı komut: md5sum "$ {dir}" / *, nokta ile başlayan gizli dosyaları seçmiyor. Herhangi bir çare var mı?
user14654

Partinin sonlarında, ancak md5sum dosya adlarını istediğinden (bir dizin verirseniz çok mutsuz görünüyor) yardım istemek en kolay olabilir: $ md5sum $ ("$ dir" bulun -maxdepth 0 -type f) The "- f "türü normal ve .hidden dosyaları çeker (ayrıca, bul seçeneğinin birçok seçeneği vardır, ancak süper yararlı olabilir). Her şeyi tekrarlı bir şekilde istiyorsanız, "-maxdepth 0" bölümünü atlayın. Not: Eğer dosya adları gömülü boşluklara sahipse, bu kırılgandır, o zaman xargs ve -0 ( en.wikipedia.org/wiki/Xargs )
adreslerini okuyabilirsiniz

0

Bu konuya değindim ve yukarıdaki çözümler zarif olsa da, bu durum için hızlı ve kirli bir kesmek istedim: 1 dizin, içinde bir seviye derinlikte bulunan alt dizinler.

Böylece dizine bir kabuk girin ve çalıştırın:

md5sum * */* 2>/dev/null > md5sum.md5

Bu, tüm dosyaları üst düzey dizinde alır, dizinler alt dizinleri hakkındaki hata uyarısını kaldırır ve ardından alt dizin içerikleri üzerinde md5sums komutunu çalıştırır. Avantaj: hatırlaması kolay, tam olarak yapması gerekeni yapar. Ben her zaman sözdizimi bularak kafam karışıyor ve kafamın üstünden asla hatırlayamıyorum, bu yüzden döngü yapmanıza gerek yok, dizin isimlerindeki boşluklarla uğraşmak zorunda kalmıyorum, bu bir astar iyi çalıştı. Sağlam ve güçlü bir çözüm değil,> 1 alt düzey dizini için iyi değil, sorun için hızlı ve kolay bir düzeltme.

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.