4

Я хотел бы сравнить папки на двух разных компьютерах.

Я использую BitTorrent Sync для синхронизации 260 ГБ данных между двумя компьютерами: настольным ПК с Windows 7 и ноутбуком с Windows 8.1. Все эти данные находятся в иерархии каталогов с корневой папкой с именем "материал".

Я заметил, что существует значительная разница в размере и количестве файлов между тем, что сообщает настольный ПК, и тем, что сообщает ноутбук.

Теперь я хочу использовать инструмент, чтобы сравнить каталог "вещи" на настольном ПК с каталогом "вещи" на ноутбуке, чтобы определить отсутствующие и измененные файлы и папки. Компьютеры не могут получить доступ к файловой системе друг друга через сеть, но передача результатов папки одного компьютера через USB-накопитель на другой компьютер вполне подходит.

2 ответа2

2

Подсказка @ harrymc для использования md5deep/hashdeep хорошо работает для меня. Ниже приведен способ использования hashdeep64 для сравнения иерархии каталогов между двумя компьютерами:

# computer A == computer on which a hashlist.txt for all files in someFileHierarchysTopDirectoryOnComputerA is generated
# computer B == computer on which computer A's generated hashlist.txt is used to compare files. Computer B generates a hashcompareresult.txt

# On computer A, create a hashlist.txt for some file hierarchy located in directory someFileHierarchysTopDirectoryOnComputerA. hashlist.txt will be placed in someFileHierarchysTopDirectoryOnComputerA's parent directory.
cd someFileHierarchysTopDirectoryOnComputerA
hashdeep64 -c md5 -r -l -e -vvv * | tee ../hashlist.txt
# this probably will take some time to finish.

# Now copy the generated hashlist.txt onto computer B's "someFileHierarchysTopDirectoryOnComputerB/.." directory. Then on computer B,
cd someFileHierarchysTopDirectoryOnComputerB
hashdeep64 -c md5 -r -l -k ../hashlist.txt -a -e -vvv * | tee ../hashcompareresult.txt
# hashdeep's -w, -W, -x, and -X modes don't seem to report errors on missing and additional files. Therefore using -a mode.
# Above command will have generated a file hashcompareresult.txt in someFileHierarchysTopDirectoryOnComputerB's parent directory.

# Now filter the created hashcompareresult.txt for mismatches:
cat ../hashcompareresult.txt | grep -E ": No match|: Known file not used"
# The resulting output shows files that
# * exist only on computer A, or
# * exist only on computer B, or
# * exist on both computers at the same location but have different MD5 hashes.
# Depending on the use case, above command probably will report some false positive files and directories, e.g. desktop.ini, Thumbs.db, .DS_Store, __MACOSX, .sync, and .SyncArchive .
# It may be adequate to filter out these file system entries, e.g. with
# cat ../hashcompareresult.txt | grep -E ": No match|: Known file not used" | grep -v -E "desktop.ini|Thumbs.db|.DS_Store|__MACOSX|.sync|.SyncArchive"
2

Даже если вы не можете сравнить файлы, решением будет сравнить их хеши.

Одним из инструментов является бесплатный и открытый исходный код md5deep :

md5deep - это набор программ для вычисления дайджестов сообщений MD5, SHA-1, SHA-256, Tiger или Whirlpool для произвольного числа файлов.

md5deep может рекурсивно исследовать все дерево каталогов. То есть вычислите MD5 для каждого файла в каталоге и для каждого файла в каждом подкаталоге.

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

Есть много других подобных программ. Быстрый гугл нашел:

HashMyFiles
Гизмо Хашер
контрольная сумма

Или даже увидеть длинный список в статье Википедии Сравнение программного обеспечения для проверки файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .