Генерировать контрольную сумму md5 для всех файлов в каталоге

Я хотел бы создать список контрольных сумм md5 для всех файлов в каталоге.

Я хочу cat filename | md5sum > ouptput.txt. Я хочу сделать это в 1 шаг для всех файлов в моем каталоге.

Любая помощь будет отличной.

1
задан 10 July 2013 в 19:29

2 ответа

Отличная программа создания / проверки контрольной суммы - это крупица. Он создает даже файлы, совместимые с SFV, и проверяет их.

Он поддерживает md4, md5, sha1, sha512, crc32 и многие другие.

Кроме того, он может выполнять рекурсивное создание (- r), например md5deep или sha1deep.

И последнее, но не менее важное: вы можете форматировать вывод файла контрольной суммы; например:

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

выводит CSV-файл, включая полный путь к файлам.

Я считаю чрезвычайно полезным даже опцию -e переименовывать файлы, вставляя сумму crc32 в имя. [ ! d5]

Вы можете изменить «md5sum» на «rash» в примерах PhoenixNL72.

6
ответ дан 24 May 2018 в 20:08
  • 1
    Что именно делает «/ home /» здесь? Этот инструмент выглядит неплохо. – Andy Ibanez 11 November 2017 в 04:49

Вот еще два обширных примера:

Создайте файл md5 в каждом каталоге, который еще не имеет одного, с абсолютными путями:
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 
Создайте файл md5 в каждой папке, уже есть один: нет путей, только имена файлов:
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 до 2, так это то, как файлы представлены в полученном файле md5.

Команды выполняют следующее:

Создайте файл md5 в каждой директории, у которой его еще нет, с абсолютными путями:
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 
Сортировка списка папок. Создайте файл md5 в каждой папке, которая еще не имеет одного: нет путей, только имена файлов:
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 
Если файл @ md5Sum.md5 не существует, md5Sum будет генерировать один с контрольными суммами всех файлов в папке. 5) Установите сгенерированный файл @ md5Sum.md5 только для чтения.

Вывод всего этого скрипта можно перенаправить в файл (.....; done> test.log) или передать в другую программу (например, grep). На выходе будут указаны только те каталоги, в которых они пропущены и которые были обработаны.

После успешного запуска вы получите файл @ md5Sum.md5 в каждом подкаталоге вашего текущего каталога

Я назвал файл @ md5Sum.md5, поэтому он будет указан в верхней части каталога в share samba.

Проверка всех файлов @ md5Sum.md5 может быть выполнена следующими командами:

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

После этого вы можете grep checklog.txt с помощью grep -v OK, чтобы получить список всех файлов, которые отличаются.

Чтобы регенерировать @ md5Sum.md5 в определенном Если вы изменили или добавили файлы, например, либо удалите файл @ md5Sum.md5, либо переименуйте его и снова запустите команду generate.

5
ответ дан 24 May 2018 в 20:08
  • 1
    Команда # 1 с использованием полных путей: md5sum " $ {dir} " / * не собирает скрытые файлы, начиная с точки. Любое средство? – user14654 4 September 2014 в 18:07
  • 2
    Поздно к вечеринке, но поскольку md5sum хочет имена файлов (кажется, uhappy, если вы даете ему каталог), было бы проще попросить найти помощь: $ md5sum $ (find " $ dir " -maxdepth 0 -type f) " ; -тип f " вытаскивает обычные и .hidden файлы (также, find имеет много вариантов, но может быть очень полезно). Опустите «-maxdepth 0» часть, если вы хотите все рекурсивно. Примечание: это хрупкость, если имена файлов имеют встроенные пространства, тогда вы можете читать на xargs и -0 ( ru.wikipedia.org/wiki/Xargs ) – jgreve 17 March 2018 в 07:40

Другие вопросы по тегам:

Похожие вопросы: