проверьте два раздела, выбрав случайные файлы и запустив хэши sha1 по двум файлам каждого раздела

Предыдущий ответ на сообщение упоминает о запуске хэшей sha1 на изображениях образа клонирования dd.

Другой ответ на этот пост предполагает установку dd-изображения, а затем сравнение, если соответствует хэши sha1 «важных файлов».

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

Предполагая, что у меня есть два смонтированных раздела, могу ли я выбрать кучу случайных файлов и сравнить хэши sha1 и остановиться с ошибкой, если хэш не равен?

Out put должен быть примерно похож на этот, если все пойдет хорошо:

OK: все 10000 случайно выбранных файлов имеют соответствующие суммы sha1 для разделов sda и sdb

Или вывод должен быть только в случае ошибки и показать имя файла, которое имеет другую сумму sha1 на обоих разделах.

Текущий текущий код:

#!/bin/bash N=5 mydir="/home" dirlisting=`find $mydir |sort -R |tail -$N` for fname in $dirlisting do echo $fname done 

2 Solutions collect form web for “проверьте два раздела, выбрав случайные файлы и запустив хэши sha1 по двум файлам каждого раздела”

Насколько я понимаю ваш вопрос, вы хотите узнать, отличаются ли N случайных файлов между двумя файловыми путями. Сравнение файлов должно быть быстрее, чем вычисление контрольных сумм обоих файлов. Вот как вы можете это сделать:

 #!/bin/sh list1=/tmp/list1 list2=/tmp/list2 shuflist=/tmp/shuflist n=100000 # How many files to compare. if test ! -d "$1" -o ! -d "$2"; then echo "Usage: $0 path1 path2" exit 1 fi exitcode=0 (cd "$1" && find . -type f >"$list1") || exit 1 (cd "$2" && find . -type f >"$list2") || exit 1 if cmp -s "$list1" "$list2"; then shuf -n "$n" "$list1" > "$shuflist" while IFS= read -r filename; do if ! cmp -s "$1/$filename" "$2/$filename"; then echo "Files '$1/$filename' and '$2/$filename' differ." exitcode=1 break fi done < "$shuflist" else echo File lists differ. exitcode=1 fi rm "$list1" "$list2" "$shuflist" exit $exitcode 

Помните, что этот скрипт предполагает, что ни одно из ваших имен файлов не содержит символ новой строки.

Если вы хотите сравнить два каталога с файлами и подкаталогами, команда diff может сделать это для вас. Запустив diff -rq / path / to / fileset1 / path / to / fileset2 , он скажет вам, какие файлы отличаются, а какие нет, для какого дерева. Вы даже можете расширить команду, чтобы дать подробный список всех изменений для целей аудита с помощью diff -rNau / path / to / fileset1 / path / to / fileset2, и перенаправить вывод в место, где вы хотите сохранить изменения.

  • Как напечатать $ {STR1} и $ STR2 - а не их содержимое - в файл?
  • Как расширить команду в bash, чтобы она расширялась в зависимости от параметров?
  • Фоновая и передняя задача и выполнение задач параллельно
  • Получение возвратов Nagios из скрипта через NRPE
  • wget не останавливается
  • прочитать файл и присвоить значения другому файлу
  • Передача подстановочного символа * в скрипт (bash?)
  • Как автоматически определять и записывать в usb с переменными пространствами в его имени
  • Добавьте / удалите рабочую станцию ​​ip в / etc / sysconfig / iptables, а затем запустите перезапуск службы iptables
  • Передавать команды сценарию, который ждет ввода на машине Linux
  • Использование $ в пароле
  • Interesting Posts

    Как вы правильно извлекаете все синонимы команд из man-страниц в / usr / share / man / man1?

    Почему я не могу убить процесс SIGSTOP'd с помощью SIGTERM и где хранится ожидающий сигнал?

    Q: Mopidy-spotify запускается, но не может использовать его с помощью телефона или ноутбука

    Почтовый вывод cron

    понимание «проверки моста» в потоке пакетов в ядре Linux

    Какой размер сектора я должен выбрать для запуска ddrescue с прямым доступом на диске расширенного формата?

    Как изменить действие прокрутки в GNOME 3.10

    Как изменить рабочий каталог для сценария оболочки

    APT-получить; понимаете, где указаны имена пакетов?

    aircrack-ng показывает отрицательный канал

    PC Boots to grub> после размещения записей таблицы разделов в порядке диска

    Использовать команды под каталогом только для интерактивного использования?

    systemd: остановить процесс загрузки при сбое (на самом деле сделать остановку)

    Установка Oracle Java 8

    cURL « неизвестное поле формы» при передаче строки, разделенной точкой с запятой, в качестве данных формы

    Linux и Unix - лучшая ОС в мире.