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.
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.
Yanıtlar:
md5sum
Birden 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
md5sum
Sub alt dizinlerin içindeki dosyaları almak için yukarıdakilerin nasıl kullanılacağını, yukarıdaki md5sum *
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 :)
openssl md5 * > checklist.txt
**
Özyinelemeli değerlendirmek için mutlu olan bir kabuk kullanıyorsanız (zsh gibi), daha da basit:md5sum **/* 2>/dev/null
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/
/home
dizini 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.
İşte iki tane daha kapsamlı örnek:
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
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:
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.
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.