проверьте два раздела, выбрав случайные файлы и запустив хэши 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, и перенаправить вывод в место, где вы хотите сохранить изменения.

  • Shell Scripting: как использовать часть пути к файлу в качестве имени файла?
  • Печатать строки, в которых первое поле имеет только четыре символа, используя регулярное выражение в awk?
  • Как получить PID подоболочки в Korn Shell (эквивалент $ BASHPID)
  • exec cp не работает из сценария, но работает при выпуске напрямую
  • Цитирование через unix-даты
  • Передавать аргументы команде, запущенной другим пользователем
  • Можно ли ссылаться на глобальную переменную, даже если локальная область существует с тем же именем?
  • Разве это имеет значение (например, по производительности), если я выполняю команду из сценария bash (по сравнению с командной строкой)?
  • bash или Ksh и команда exec
  • BASH: как Grep и отображает набор значений
  • Как преобразовать беззнаковое десятичное число (менее 1 << 32) в 4 байта (двоичное) в bash?
  • Interesting Posts

    Почему find с -delete удаляет файлы в каталоге / save /, когда find без удаления не смог найти их?

    Как установить пакет RPM на Angstrom

    Stat Symbolic Link: не будет отображаться исходное время изменения файла

    Какое ядро ​​Debian я должен установить?

    $ ORIGIN в файлах зоны IPv6

    Телинит команда не работает

    Intel Turbo Boost, по-видимому, активировался без причины?

    Почему нет простого способа перечислить все процессы в данной группе процессов?

    Экспортировать переменную env, которая будет доступна во всех суб-оболочках, и может быть изменена?

    Возможно ли выполнить сценарий VIM в неинтерактивном режиме?

    Сохранять сообщения из предыдущих загрузок при одновременном сохранении выходных данных журнала

    экран ввода iPhone типа?

    Как изменить права доступа на внешний жесткий диск в Arch Linux?

    Использовать переменные в команде find

    процесс pkill, содержащий специальные символы

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