Filesytem desarrumado: Remoção de arquivo duplicado da linha de comando

2

No debian / ubuntu eu quero:

a) crie uma lista de todos os arquivos em uma árvore de diretórios | b) faça o mesmo para uma segunda árvore de diretórios | c) compare as duas listas de modo que, apenas o arquivo NAMES seja comparado (isto é, apenas comparando a parte "file.txt" para que "/home/folder/file.txt" == "/ home / secondfolder / folder / file. txt)
d) produzir uma lista de todos os duplicados

alguém pode explicar como fazer isso usando linguagens de script ou regex ou algo assim?

    
por jrause 17.01.2011 / 05:59

2 respostas

1

Use find /some/dir -printf '%f\t%p\n > files<N>.lst' ou alguma variante dele para encontrar os arquivos nas árvores e, em seguida, join -j 1 files1.lst files2.lst para combinar as listagens de arquivos em uma única saída.

    
por 17.01.2011 / 06:16
0

Aqui está um exemplo que funciona com [t] csh, sh, etc., empregando 'find', 'awk', 'sort', 'uniq' e um / bin / sh one-liner para executar ' md5sum 'para obter a assinatura de cada arquivo. Com a lista de assinaturas para os arquivos de ambas as estruturas de diretórios, a seqüência de comandos retornará os arquivos que são os mesmos:

find a/ b/ -type f -exec md5sum {} \; > /tmp/list; awk '{print $1}' ' | awk '{print $2}' | sh -c 'while read s; do awk "/^$s/ { print \}" /tmp/list; echo; done'

Essencialmente, isso gera o md5sum para todos os arquivos no diretório 'a' e no diretório 'b'. As strings hexadecimais (primeira coluna) são enviadas para um pipeline filtrando instâncias de apenas uma única ocorrência para uma determinada soma de verificação, passando o restante para um / bin / sh iterator que extrai todos os arquivos reais que correspondem à soma de verificação (e inserindo o linha em branco entre os grupos.)

Ele separa os agrupamentos de duplicatas por uma linha em branco. Isso oferece a vantagem óbvia (acima e além da solicitação original) de encontrar arquivos duplicados que tenham o mesmo conteúdo, mas diferentes nomes de arquivos.

    
por 31.01.2011 / 03:23