Comparando pastas em dois computadores não conectados

4

Gostaria de comparar pastas em dois computadores diferentes.

Estou usando o BitTorrent Sync para sincronizar atualmente 260 GB de dados entre dois computadores: um computador de mesa com Windows 7 e um laptop com Windows 8.1. Todos esses dados residem em uma hierarquia de diretórios com uma pasta raiz chamada "stuff".

Tenho notado que existe um tamanho significativo e uma diferença na contagem de arquivos entre o que o PC de mesa informa e o que o laptop informa.

Agora eu quero usar uma ferramenta para comparar o diretório "stuff" do PC desktop com o diretório "stuff" do laptop para identificar arquivos e pastas ausentes e alterados. Os computadores não podem acessar o sistema de arquivos uns dos outros por meio de uma rede, mas a transferência do resultado da pasta de um computador via unidade flash USB para o outro computador é boa.

    
por Abdull 20.09.2014 / 09:34

2 respostas

2

@ A dica do harrymc para usar o md5deep / hashdeep funciona bem para mim. A seguir, há uma maneira de usar o hashdeep64 para comparar uma hierarquia de diretórios entre dois computadores:

# 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"
    
por 22.10.2014 / 12:20
2

Mesmo que você não consiga comparar os arquivos, a solução será comparar os hashes deles.

Uma ferramenta é a md5deep gratuita e de código aberto:

md5deep is a set of programs to compute MD5, SHA-1, SHA-256, Tiger, or Whirlpool message digests on an arbitrary number of files

md5deep is able to recursive examine an entire directory tree. That is, compute the MD5 for every file in a directory and for every file in every subdirectory.

md5deep can accept a list of known hashes and compare them to a set of input files. The program can display either those input files that match the list of known hashes or those that do not match.

Existem muitos outros programas semelhantes. Um rápido google encontrado:

HashMyFiles
Gizmo Hasher
soma de verificação

Ou até mesmo veja a longa lista no artigo da Wikipédia Comparação do software de verificação de arquivos .

    
por 11.10.2014 / 18:26