Verifique quais arquivos em uma pasta estão faltando em outra pasta?

2

Ao copiar fotos de fontes variadas para o meu arquivo principal, gostaria de copiar apenas os arquivos que ainda não estão no arquivo. O rsync ou arquivos que comparam aplicativos como o WinMerge e o Meld parecem não conseguir verificar se já existe um arquivo com um nome diferente ou em uma subpasta diferente. Primeiro, copiar todas as novas imagens de origem para o arquivo morto, excluir as duplicatas e, em seguida, organizar os arquivos parece ser um trabalho extra.

Se houver uma maneira de verificar quais arquivos em uma pasta de origem não são encontrados em nenhuma parte de uma pasta de destino? As subpastas também devem ser verificadas. O arquivo pode ter um nome diferente ou um local diferente.

    
por Samuli K 26.08.2010 / 07:00

3 respostas

2

Use find com md5sum para obter as somas de verificação de todos os arquivos na origem e no destino e, em seguida, use comm para encontrar as somas de verificação ausentes do destino.

Ou você pode experimentar a opção -y de rsync .

    
por 26.08.2010 / 07:42
0

Como fazer isso, depende se seus arquivos de imagem são idênticos aos bits ou se são visualmente semelhantes (por exemplo, porque eles podem ter comentários diferentes ou serem recompactados, recortados ...).

Se os arquivos forem idênticos e você puder renomeá-los na origem e no arquivo, será fácil renomeá-los para sempre ter o mesmo nome. Você pode manter o nome antigo como um link simbólico. Não testado:

for orig in *.jpg; do
  canon=$(<"$orig" md5sum | sed 's/ .*//').jpg
  mv -i "$orig" "$canon"
  ln -s "$canon" "$orig"
done

Isso pressupõe que seu arquivo seja um único diretório. Se houver subdiretórios, você precisará alterar *.jpg para **/*.jpg (requer o bash 4 ou zsh) e organizar para adicionar a quantia correta de ../ ao comando ln .

Depois disso, o rsync copiará apenas o conteúdo e o nome de novas fotos e novos nomes para fotos existentes.

Se você puder renomear os arquivos apenas no seu arquivo, você ainda pode organizar algo com o uso inteligente de links simbólicos e provavelmente rsync --copy-unsafe-links .

Se os arquivos são visualmente semelhantes, é mais complicado, e não pode haver uma resposta totalmente automatizada (entre uma versão recortada e uma versão de baixa qualidade, um ser humano tem que fazer a escolha). Algumas ferramentas para comparar imagens visualmente semelhantes podem ajudar, por ex. gqview (interativo) ou findimagedupes (linha de comando).

Observe que, como você não especifica seu sistema operacional, fiz sugestões que funcionam no meu. Eles vão trabalhar em qualquer sistema similar ao UNIX, incluindo OSX e Cygwin. A ideia de link simbólico também funcionará nativamente no Windows XP e mais recente (talvez até mais cedo), mas requer a instalação de ferramentas adicionais.

    
por 26.08.2010 / 22:14
0

A coisa toda " nome diferente ou em uma subpasta diferente " pode ser um pouco complicada de descobrir ... Claro que você pode fazer uma comparação de hash, mas à medida que seu diretório de destino cresce, o o tempo para fazer a mesclagem aumentará.

Não é muito chique, mas que tal usar algo como o Robocopy para Windows?

robocopy /E source destination
    
por 27.08.2010 / 00:45