Chciałbym znaleźć md5sum
(lub podobne obliczenie) folderu bez kompresji go do archiwum.
Na przykład, jeśli w folderze MyFolder
mamy pliki 1.txt
, 2.txt
i 3.txt
zawierający:
1.txt
Tekst do 1.txt
2.txt
Tekst do 2.txt
3.txt
Tekst do 3.txt
Jak mogę obliczyć md5sum
całość MyFolder
? Czy jest jakiś sposób? Chcę tego użyć, aby sprawdzić, czy dwa foldery mają tę samą zawartość.
Można to wykorzystać do sprawdzenia, czy dwa dyski CD lub foldery są równe. Chciałbym w łatwy sposób to zrobić.
files
checksum
verification
GarouDan
źródło
źródło
sudo apt-get install md5deep
md5deep -rel /path/to/your/directory/ > directory_hash.md5
md5deep -X directory_hash.md5 -r /path/to/your/second/direcotory
dziękuję.-o
opcji do obsługi typów plików.Jeśli nie chcesz go archiwizować, być może możesz zrobić coś takiego
Być może będziesz musiał dostosować
find
polecenia, aby były bardziej dokładne.EDYCJA Możesz dodać
-exec
do swojego wywołania find, aby porównać zawartość plików. Coś podobnego do tego:Pamiętaj, że możesz to dostosować.
źródło
Jednym ze sposobów przetestowania może być wygenerowanie sumy md5 na podstawie konkatenacji wszystkich plików w folderze i jego podfolderach. Pamiętaj, że wymaga to również, aby pliki miały te same nazwy (ponieważ muszą być w tej samej kolejności sortowania). Powinien działać następujący kod:
Jeśli naprawdę zależy Ci na nazwach plików itp., Możesz użyć pętli do porównania tego, co jest w
${_files_in_old_dir}
i${_files_in_new_dir}
. Powinno to działać w większości przypadków (przynajmniej sprawdza liczbę plików w katalogu i jego podkatalogach).źródło
globstar
. Jaki jest błąd?Zauważyłem, że oryginalny post jest dość stary, ale myślę, że te informacje mogą być cenne dla osób szukających rozwiązania, które pozwoli sprawdzić, czy pliki są poprawnie kopiowane. Rsync może być najlepszą metodą kopiowania danych, a odpowiedzi podane w tym wątku są dobre, jednak dla tych, którzy nie mają doświadczenia z Linuksem, postaram się podać bardziej szczegółowe wyjaśnienie.
Scenariusz: Właśnie skopiowałeś dane z dysku na inny, z dużą ilością podkatalogów i plików. Chcesz sprawdzić, czy wszystkie dane są poprawnie skopiowane.
Najpierw sprawdź, czy md5deep jest zainstalowany, wydając polecenie
md5deep -v
.Jeśli pojawi się komunikat „Nie znaleziono polecenia”, zainstaluj md5deep przez
apt-get install md5deep
.Zakłada się, że chcesz zajmować się tylko zwykłymi plikami. Jeśli chcesz poradzić sobie z innymi typami plików, skorzystaj z opcji -o w instrukcji md5deep. (
man md5deep
)Teraz możesz już iść i zakładamy, że skopiowałeś pliki z
/mnt/orginal
do/mnt/backup
, zamień je na katalogi, których używasz.Najpierw przejdź do katalogu źródłowego, jest to oryginalne źródło skopiowanych lub utworzonych kopii plików:
cd /mnt/orginal
Następnie zrób sumę kontrolną dla każdego pliku:
md5deep -rel -o f . >> /tmp/checksums.md5
To polecenie wyjaśniło:
-r
włącza tryb rekurencyjny-e
wyświetla wskaźnik postępu-l
włącza względne ścieżki plików.-o f
działa tylko na zwykłych plikach (nie blokuje urządzeń, nazwanych potoków itp.).
każe md5deep rozpocząć w bieżącym katalogu.>> /tmp/checksums.md5
mówi md5deep, aby przekierował wszystkie dane wyjściowe do/tmp/checksums.md5
.Uwaga: jeśli chcesz zastąpić treść w poprzednich wersjach
/tmp/checksums.md5
, użyj>
i nie>>
Zauważ, że to polecenie może potrwać dość długo, w zależności od prędkości io i rozmiaru danych. Możesz eksperymentować z ładnym i / lub jonice, aby zwiększyć wydajność md5deep, ale to nie wchodzi w zakres tej odpowiedzi.
Po zakończeniu tworzenia sum kontrolnych masz teraz plik zawierający wpisy podobne do:
Pierwsza kolumna to suma kontrolna md5, a druga kolumna to ścieżka względna do pliku, do którego należy suma kontrolna.
Jeśli chcesz zobaczyć, ile plików istnieje w pliku sumy kontrolnej, wydaj polecenie:
wc /tmp/checksums.md5 -l
Teraz chcesz sprawdzić, czy skopiowane dane są poprawne:
cd /mnt/backup
md5deep -o f -reX /tmp/checksums.md5 . >> /tmp/compare.result
Jedyna różnica w porównaniu z momentem utworzenia sum kontrolnych to -X, który wyświetla bieżący skrót pliku, jeśli wpis w pliku checksums.md5 nie jest zgodny. Pod koniec testu, jeśli
/tmp/compare.result
jest pusty, możesz ufać, że wszystkie pliki są poprawnie skopiowane, ponieważ sumy kontrolne są zgodne.Zauważ, że tylko pliki wymienione w
/tmp/checksums.md5
pliku zostaną sprawdzone pod kątem poprawnej sumy kontrolnej, jeśli w/mnt/backup
katalogu znajdują się dodatkowe pliki , md5deep nie powiadomi Cię o nich.Uwagi:
Nie musisz używać przekierowania do przechowywania plików wyjściowych. Więcej informacji można znaleźć w instrukcji obsługi md5deep.
Może być konieczne uruchomienie komend md5deep jako root, w zależności od uprawnień plików, które obsługujesz.
źródło
Jeśli chcesz sprawdzić rekurencyjnie różnice między dwoma katalogami
/path1
i/path2
bez użyciamd5deep
:Wyjaśnienie:
path1
do, aby wszystkie linie były drukowane przezfind
be względempath1
(cd /path1
)&& find . -type f
)find
jako jako danych wejściowych dlamd5
(| xargs md5
)Wynik będzie wyglądał tak, jeśli występują jakiekolwiek różnice:
źródło