Chciałbym utworzyć listę sum kontrolnych md5 dla wszystkich plików w katalogu.
Chcę cat filename | md5sum > ouptput.txt
. Chcę to zrobić w 1 kroku dla wszystkich plików w moim katalogu.
Każda pomoc byłaby świetna.
Chciałbym utworzyć listę sum kontrolnych md5 dla wszystkich plików w katalogu.
Chcę cat filename | md5sum > ouptput.txt
. Chcę to zrobić w 1 kroku dla wszystkich plików w moim katalogu.
Każda pomoc byłaby świetna.
Odpowiedzi:
Możesz przekazać md5sum
wiele nazw plików lub rozszerzeń bash:
$ 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
Jeśli chcesz się zachwycić, możesz użyć funkcji takich jak find
drążenie w dół i filtrowanie plików, a także praca rekurencyjna:
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
md5sum *
find -type f -exec md5sum '{}' +
i `find -type f -exec md5sum '{}' 'Udało mi się to. Dzięki :)
openssl md5 * > checklist.txt
**
rekurencyjnie (np. Zsh), jest to jeszcze prostsze:md5sum **/* 2>/dev/null
Świetnym programem do tworzenia / weryfikacji sum kontrolnych jest wysypka. Tworzy nawet pliki kompatybilne z SFV i sprawdza je.
Obsługuje MD4, MD5, SHA1, SHA512, CRC32 i wiele innych.
Ponadto może tworzyć rekurencyjne (opcja -r), takie jak md5deep lub sha1deep.
Wreszcie możesz sformatować dane wyjściowe pliku sumy kontrolnej; na przykład:
rhash --md5 -p '%h,%p\n' -r /home/
wypisuje plik CSV zawierający pełną ścieżkę plików rekurencyjnie rozpoczynającą się od /home
katalogu.
Uważam, że niezwykle przydatna jest nawet opcja zmiany nazwy plików przez wstawienie sumy crc32 do nazwy.
Możesz zmienić „md5sum” za pomocą „rhash” w przykładach PhoenixNL72.
Oto dwa bardziej obszerne przykłady:
Utwórz plik md5 w każdym katalogu, który jeszcze go nie ma, z bezwzględnymi ścieżkami:
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
Utwórz plik md5 w każdym folderze, który jeszcze go nie ma: żadnych ścieżek, tylko nazwy plików:
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
Różnica między 1 a 2 polega na sposobie prezentacji plików w wynikowym pliku md5.
Polecenia wykonują następujące czynności:
Dane wyjściowe całego skryptu można przekierować do pliku (.....; done> test.log) lub przesłać do innego programu (np. Grep). Dane wyjściowe pokażą tylko, które katalogi zostały pominięte, a które przetworzone.
Po udanym uruchomieniu skończysz z plikiem @ md5Sum.md5 w każdym podkatalogu bieżącego katalogu
Nazwałem plik @ md5Sum.md5, aby znalazł się na górze katalogu w udziale samby.
Weryfikowanie wszystkich plików @ md5Sum.md5 można wykonać za pomocą następujących poleceń:
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
Następnie możesz grepować plik checklog.txt za pomocą grep -v OK, aby uzyskać listę wszystkich plików, które się różnią.
Aby ponownie wygenerować plik @ md5Sum.md5 w określonym katalogu, na przykład po zmianie lub dodaniu plików usuń plik @ md5Sum.md5 lub zmień jego nazwę i ponownie uruchom komendę generowania.
Dotknąłem tego problemu i chociaż powyższe rozwiązania są eleganckie, chciałem szybkiego i brudnego włamania do tej sytuacji: 1 katalog z podkatalogami o jeden poziom głęboko w środku.
Wpisz katalog w powłoce i uruchom:
md5sum * */* 2>/dev/null > md5sum.md5
Spowoduje to pobranie wszystkich plików z katalogu najwyższego poziomu, usunięcie ostrzeżenia o błędzie dotyczącego podkatalogów będących katalogami, a następnie uruchomienie md5sums na zawartości podkatalogu. Zaleta: łatwa do zapamiętania, robi dokładnie to, co powinna. Zawsze się mylę ze składnią find i nigdy nie pamiętam jej z góry głowy, więc nie trzeba zapętlać itp., Zajmując się spacjami w nazwach katalogów, ta jedna linijka działała dobrze. Nie jest to solidne, wydajne rozwiązanie, nie nadaje się do> 1 poziomu podkatalogów, ale szybkie i łatwe rozwiązanie problemu.