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

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

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

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

75
задан 10 July 2013 в 18:29

5 ответов

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

  1. Создайте файл 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 
    
  2. Создайте файл 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.

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

  1. Создают список имен каталогов для текущей папки. (Дерево)
  2. Сортировка списка папок.
  3. Проверьте в каждом каталоге, существует ли файл @ md5sum.md5. Выход пропущен, если он существует, выводит Обработку, если он не существует.
  4. Если файл @ md5Sum.md5 не существует, md5Sum создаст файл с контрольными суммами всех файлов в папке. 5) Установите созданный файл @ md5Sum.md5 только для чтения.

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

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

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

Проверка всех файлов @ 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.

0
ответ дан 10 July 2013 в 18:29

Вы можете передать md5sum несколько имен файлов или расширений 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

Если вы хотите проявить фантазию, вы можете использовать такие вещи, как find для детализации и фильтрации файлов, а также для работы. рекурсивно:

find -type f -exec md5sum "{}" + > checklist.chk
0
ответ дан 10 July 2013 в 18:29

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

Он поддерживает MD4, MD5, Sha1, Sha512, CRC32 и многие другие.

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

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

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

выводит файл CSV, включая полный путь файлов, рекурсивно начинающийся с каталога /home.

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

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

0
ответ дан 10 July 2013 в 18:29

Я поразил эту проблему, и в то время как решения выше изящны, я хотел быстрый и грязный взлом для этой ситуации: 1 каталог, с подкаталогами один уровень глубоко в нем.

Так, введите каталог в оболочку и работайте:

md5sum * */* 2>/dev/null > md5sum.md5

Это получает все файлы в высокоуровневом каталоге, удаляет ошибку при предупреждении о подкаталогах быть каталогами и затем выполняет md5sums на содержании подкаталога. Преимущество: легкий помнить, делает точно, что это, как предполагается, делает. Я всегда запутываюсь синтаксисом находки и никогда не могу помнить это первое, что пришло на ум, таким образом, никакая потребность циклично выполниться и т.д., имея дело с пробелами в именах каталогов, этот лайнер хорошо работал. Не устойчивое мощное решение, отрицательный результат для> 1 уровень подкаталогов, но быстрая и легкая фиксация для проблемы.

0
ответ дан 11 October 2019 в 11:01

Вот мой:

time find dirname/|xargs md5sum |tee dirname.md5

Он выдает ошибки, когда пытается вычислить его для каталога, но для меня этого достаточно.

3
ответ дан 21 February 2020 в 03:49

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

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