2014-10-28 2 views
1

Я использую команду 7z в скрипте bash для создания архива 7z для целей резервного копирования. Мой скрипт также проверяет, существует ли этот новый архив 7z в моей резервной папке, и если да, то я иду и запускаю md5sum, чтобы узнать, отличается ли контент. Поэтому, если файл архива еще не завершен или md5sum отличается от предыдущего, я копирую его в свою резервную папку. Поэтому я попробовал простой пример для тестирования скрипта, но проблема в том, что иногда я получаю разные md5sum для той же самой папки, которую я сжимаю. Почему это так? Есть ли другой надежный способ проверки того, отличается ли содержимое файла? Команды просты:Почему 7z создает разные файлы?

SourceFolder="/home/user/Documents/" 
for file in $SourceFolder* 
do 
    localfile=${file##*/} 
    7z a -t7z "$SourceFolder${localfile}.7z" "$file" 
    md5value=`md5sum "$SourceFolder${localfile}.7z"|cut -d ' ' -f 1` 

... copyinf файлы идет отсюда на ...

+1

Является ли это эмулятором Linux, работающим под окнами? Если это так, окна, вероятно, модифицируют содержимое «Документов» каким-либо образом, чтобы заставить md5sum вернуть другую контрольную сумму. –

+0

Пожалуйста, используйте разметку 'fullcode', а не' \ '' –

+1

Возможно, 7z включает в себя отметку времени (штамп времени создания?) В архиве. Сравните их с 'cmp -l 1.7z 2.7z' и посмотрите, сколько байтов отличается. – glglgl

ответ

1

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

+0

Я согласен, но с 7z я сжимаю целые папки, и это не очень удобно сравнивать их файлы во всей древовидной структуре. Может быть, я мог бы это сделать как-то рекурсивно, но как я еще не знаю, как это сделать. Можно ли использовать другой эквивалент для получения того же результата? Могу ли я создать tar-архивы без сжатия и сравнить md5sum с ними с md5sum старых резервных копий, будет ли это работать? Всегда ли tar создает файл с тем же md5sum (предположим, что я архивирую один и тот же контент и не использую переключатель «z»)? – arcull

+0

@arcull: 'tar' стоит попробовать, конечно. С течением времени это намного меньше шансов, и быстрый тест на моей системе показывает, что tarring того же самого каталога дважды дает тот же 'md5sum' в обоих выходных файлах tar. Попробуйте. :) –

0

Я частично решил это. Похоже, что имеет значение, если вы укажете полный путь к папке, которую вы сжимаете или нет. Полученный файл не совпадает. . Это влияет как на 7z, так и на tar.I означает вот так: value1=$(tar -c /tmp/at-spi2/|md5sum|cut -d ' ' -f 1) value2=$(tar -c at-spi2/|md5sum|cut -d ' ' -f 1)

Так что, очевидно, я делаю это неправильно. Есть ли переключатель для 7z и tar, который удалит абсолютный путь?

Смежные вопросы