Descobrir quais arquivos não são duplicados em um segundo local, independentemente das diferenças de estrutura de diretórios?

3

Eu tenho dois diretórios com centenas de milhares de arquivos em cada um. A maioria dos arquivos é duplicada entre os dois locais, mas alguns não são, e eu gostaria de saber quais não são duplicados (ou seja, por exemplo, eles não são copiados, e então eu poderia fazer uma escolha para voltar ou apagá-los). A principal coisa é que o caminho para cada arquivo pode ser completamente diferente em relação aos diretórios pai. Alguns arquivos podem ser os mesmos, mas têm nomes diferentes, a ferramenta deve comparar as somas de verificação para eliminá-las da saída.

    
por Lucas W 06.01.2017 / 19:56

2 respostas

0

Existe um pequeno programa maravilhoso chamado fdupes que pode ajudar com isso - apenas tenha cuidado, pois você pode configurá-lo para excluir todos os duplicados, bem como outras coisas divertidas.

    
por 06.01.2017 / 21:17
0

Eu não testei muito, mas esta é a solução fdupes até agora:

#!/usr/bin/env python
# Load a list of files in dir1, dir2, 
# and a list of dupes provided by fdupes,
# and produce a list of files that aren't duplicated.
#
# find dir1 -type f > dir1.txt
# find dir2 -type f > dir2.txt
# fdupes dir1 dir2 -1 > dupes.txt

import sys

# print sys.argv
dir1_file = sys.argv[1]
dir2_file = sys.argv[2]
dupes_file = sys.argv[3]

dir1 = {}
with open(dir1_file) as f:
    for line in f:
        dir1[line.strip()] = True

dir2 = {}
with open(dir2_file) as f:
    for line in f:
        dir2[line.strip()] = True

dupes = {}
with open(dupes_file) as f:
    for line in f:
        (dir1_dupe, dir2_dupe) = line.split()
        rv1 = dir1.pop(dir1_dupe, None)
        rv2 = dir2.pop(dir2_dupe, None)

# print "non dupes:"
for key in dir1.keys():
    print key
for key in dir2.keys():
    print key
    
por 18.01.2017 / 14:44

Tags