Diferenciando dois diretórios recursivamente com base em somas de verificação?

Diferenciando dois diretórios recursivamente com base em somas de verificação?

Estou tentando descobrir quais arquivos não existem por meio de uma soma de verificação de seu conteúdo. Eu tenho dois diretórios /fooe /barambos representam estados arbitrários no sistema, quero encontrar todosarquivosna raiz /barque não existem na raiz /foo(recursivamente). Um dicionário de /bar/**com

CheckSum -> filepath

menos o dicionário de /foo/**com

CheckSum -> filepath  

Posso escrever isso usando md5sum ou algo assim, mas já deve haver um utilitário que faça isso.

Só para ficar claro, se dois arquivos forem idênticosexcetopor localização (nome e caminho) quero que sejam identificados como iguais.

Caso de teste

Vamos criar uma árvore com alguns dados de teste,

/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│   └── findMe
└── quz
    └── asdf
        └── otherFileName (duplicate of /tmp/foo/myFile)

Script para criação,

mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz

# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName

# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10

Portanto, o programa comparando /tmp/fooe /tmp/bardeve encontrar/tmp/bar/qaz/findMe

Responder1

Eu geraria uma listagem md5sum (uma coluna para soma e uma coluna para nome de arquivo) para ambas as árvores e canalizaria o resultado em um script (digamos awk ou perl) que pode usar a soma como um hash para os nomes de arquivos e fazer o nomes de arquivos de relatório de script que possuem o mesmo valor de hash.

Isso é mais do que uma frase simples e é algo frequentemente questionado e frequentemente resolvido (uma pesquisa na web por arquivos duplicados por conteúdo resulta em mais de um milhão de resultados).

Você pode achar isso útil:

informação relacionada