Как проверить md5 на папку с файлами?

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

Как вычислить md5sum для целой папки?

Обновление:

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

Позволяет предполагают, что мы хотим сравнить папки a и b:

tree .
.
├── a
│  ├── 1.txt
│  └── d
│  └── 2.txt
└── b
    └── 1.txt

Это может показать различие:

find a -type f | sort | xargs md5 -r | cut -f1 -d " " > a.txt
find b -type f | sort | xargs md5 -r | cut -f1 -d " " > b.txt
git diff --no-index a.txt b.txt

Но как проверить, какой файл соответствует хешу, который отсутствует в одной из папок?

Если я

cd a
find . -type f | sort | xargs md5 -r > ../a.txt
cd ..
cd b
find . -type f | sort | xargs md5 -r > ../b.txt
cd ..
git diff --no-index a.txt b.txt

Это решает проблему, однако возможно, не очень изящную.

-1
задан 15 November 2019 в 19:00

2 ответа

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

Из-за этого я предложу одно демонстрационное решение:

cd /target/directory
md5sum * >/tmp/tmp_file

Если Вы имеете подкаталоги и файлы и хотите включать те файлы, также используют

cd /target/directory
find . -type f -exec md5sum {} \; >/tmp/tmp_file

передача tmp_file к другому серверу и выполняются там

cd /remote_target/directory
md5sum -c /tmp/tmp_file

(если tmp_file передается в /tmp каталог), и Вы будете видеть вывод как это:

[root@rh1 sssd]# md5sum -c /tmp/a
./sssd.log: OK
./sssd_implicit_files.log: OK
./sssd_nss.log: OK
./a/aa: OK
1
ответ дан 21 December 2019 в 23:57

Используя rhash для вывода хешей md5 в файл.

$ rhash -Mr -o /path/to/md5sum .

Проверьте хеш из файлов.

$ rhash -c /path/to/md5sum

опции rhash:

  • -M MD5: вычислите и распечатайте сумму хеша MD5.
  • -r Рекурсивно рабочие каталоги, указанные командной строкой.
  • -o Установите файл для вывода вычисленных хешей и результатов проверки.
  • -c Проверьте файлы хеша, указанные командной строкой.

Сохранение структуры каталогов в тот же файл.

$ find -type d -printf "; %P\n" >> /path/to/md5sum1

Сравните файлы линию за линией.

$ diff md5sum1 md5sum2
0
ответ дан 21 December 2019 в 23:57

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

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