
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 /foo
e /bar
ambos representam estados arbitrários no sistema, quero encontrar todosarquivosna raiz /bar
que 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/foo
e /tmp/bar
deve 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: