AKTUALIZACJA: Minęło kilka lat, odkąd opublikowałem tę odpowiedź, a tymczasem przepisałem i poprawiłem skrypt, który tutaj przedstawiłem kilka razy. Postanowiłem ponownie opublikować nowy skrypt jako zupełnie nową odpowiedź. Gorąco poleciłbym to nad tym.
WPROWADZENIE
Zauważyłem, że kolejność, w jakiej komenda find wyświetla znalezione elementy w katalogu, zmienia się w identycznych katalogach na różnych partycjach. Jeśli porównujesz skróty tego samego katalogu, nie musisz się tym martwić, ale jeśli otrzymujesz skróty, aby upewnić się, że żadne pliki nie zostały pominięte lub uszkodzone podczas kopiowania, musisz dołączyć dodatkowy wiersz sortowanie zawartości katalogu i jego elementów. Na przykład odpowiedź Matthew Bohnsacka jest dość elegancka:
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum
Ale jeśli używasz go do porównywania skopiowanego katalogu do jego oryginalnego, wyślesz dane wyjściowe do pliku txt, który porównasz z listą wyjściową z innego katalogu za pomocą Kompare lub WinMerge lub po prostu uzyskując skróty każdego lis . Chodzi o to, że ponieważ kolejność wyświetlania przez narzędzie wyszukiwania zawartości może się różnić w zależności od katalogu, Kompare zasygnalizuje wiele różnic, ponieważ skróty nie zostały obliczone w tej samej kolejności. Nie jest to wielka sprawa dla małych katalogów, ale dość denerwująca, jeśli masz do czynienia z 30000 plików. Dlatego wykonałeś dodatkowe kroki w sortowaniu danych wyjściowych, aby ułatwić porównanie list skrótów między dwoma katalogami.
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum > sha1sum_list_unsorted.txt
sort sha1sum_list_unsorted.txt > sha1sum_list_sorted.txt
Spowodowałoby to sortowanie danych wyjściowych, dzięki czemu pliki z tym samym hashem będą znajdować się w tych samych wierszach podczas uruchamiania programu różnicującego (pod warunkiem, że w nowym katalogu nie brakuje żadnych plików).
I NA PISMO ...
Oto skrypt, który napisałem. Robi to samo co odpowiedź find / xarg, ale sortuje pliki przed pobraniem sha1sum (utrzymując je w tym samym katalogu). W pierwszym wierszu skryptu rekursywnie znajdują się wszystkie pliki w katalogu. Następny sortuje wyniki alfabetycznie. Następne dwa pobierają posortowaną zawartość i dołączają sha1sum i cudzysłowy do plików na posortowanej liście, tworząc duży skrypt powłoki, który oblicza skrót każdego pliku, pojedynczo i wysyła go do content_sha1sum.txt.
#!/bin/bash
find . -type f > content.txt
sort content.txt > content_sorted.txt
awk '{print "sha1sum \""$0}' content_sorted.txt > temp.txt
awk '{print $0"\""}' temp.txt > get_sha1.sh
chmod +x get_sha1.sh
./get_sha1.sh > content_sha1sum.txt
rm content.txt
rm content_sorted.txt
rm temp.txt
rm get_sha1.sh
xdg-open content_sha1sum.txt
Mam nadzieję że to pomoże.