Как легко обновить список md5sums?

Иногда я использую ненадежную среду (flash) для хранения большого количества данных. Чтобы хотя бы распознать бит флип, я сохраняю файл вместе с md5sums. Этот файл обычно создается с помощью варианта find -type f -exec "{}" \; >MD5SUM find -type f -exec "{}" \; >MD5SUM . Позже я копирую на нем еще несколько файлов, и теперь я хотел бы добавить контрольные суммы новых файлов, не переучитывая старые. К сожалению, время некоторых машин, которые я использую, завинчивается, поэтому используйте find -newer <file> -exec md5sum "{}"\; >>MD5SUM find -newer <file> -exec md5sum "{}"\; >>MD5SUM не вариант. В основном я хотел бы получить разницу между списком файлов, созданным find -type f и списком в файле MD5SUM.

Любые идеи, как это сделать легко и элегантно? Заранее спасибо!

3 Solutions collect form web for “Как легко обновить список md5sums?”

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

 #!/bin/sh # change directory to either first argument or to current directory cd ${1:-"."} || exit 1 # if cannot cd, then exit # get the md5 values for all the files in the directory tree find . -type f -not -name .md5sum.last -exec md5sum {} \; | sort > .md5sum.tmp # if called before, then get only the differences in the newer if [ -f .md5sum.last ]; then comm -13 .md5sum.last .md5sum.tmp else # otherwise show all the output cat .md5sum.tmp fi # replace the older with the current for next time mv .md5sum.tmp .md5sum.last 

sort и comm -13 являются ключевыми. Сортировка очевидна, но comm (short для «common») будет отображать строки, которые находятся в первом файле (столбец 1), второй файл (столбец 2) или оба (столбец 3). Опция -13 говорит, что «отбирает столбец один и третий», оставляя только строки, которые не только старше, но не являются общими для обоих. К сожалению, если вы не можете доверять методам времени в файлах, это будет очень интенсивный процесс для больших деревьев каталогов.

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

Однако, если вы только добавляете файлы на свой флеш-накопитель (никогда не изменяйте, возможно, не удаляете, но никогда не добавляете файл, который ранее существовал раньше), вы можете:

 find _your_drive_path_ -type f | while read file; do grep -q $file _your_md5_file_ || md5sum $file >> _your_md5_file_ done 

Этот grep ваш файл контрольной суммы много раз и может быть оптимизирован путем сортировки списка файлов и сохранения файла контрольной суммы, отсортированного по имени файла, но если вам не нужна эта оптимизация, зачем беспокоиться о ее сложности …

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

Я бы сохранил новый файл MD5SUM во временное место, а затем diff старые и новые файлы, чтобы увидеть, что было изменено, прежде чем копировать обновленный файл в flash. Вам может потребоваться отсортировать файл, чтобы получить полезный diff.

  • Git alias multi-commands с; а также &&
  • Параллельный запуск функций
  • У меня есть 10 файлов в папке Unix с расширением .txt, здесь мне нужно получить все файлы отдельно от файла fgh.txt (любой), что такое команда UNIX?
  • Как просмотреть файлы и каталоги точки монтирования
  • Что делает команда su - `whoami`?
  • Скопируйте текстовые строки из файла и добавьте их в один и тот же файл с префиксом средней линии или удалите префикс средней строки
  • Способ записи нового имени файла на подстановочный знак?
  • Подстановка на месте для строк, соответствующих некоторому шаблону в заданном наборе файлов
  • rsync - копировать содержимое каталога только в том случае, если определенный файл не существует
  • grep переменная в выражении if
  • Можно ли отслеживать отправленные письма?
  • Ошибка команды Bash
  • Linux и Unix - лучшая ОС в мире.