Messy Filesytem: Remoção de arquivo duplicado na 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 somente os NOMES de arquivo sejam comparados (ou seja, apenas comparando a parte "file.txt" para que "/home/folder/file.txt" == "/home/secondfolder/folder/file.txt)
d ) gera uma lista de todas as duplicatas

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

Respostas:


1

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


0

Aqui está um exemplo que funcionaria com [t] csh, sh, etc., empregando 'find', 'awk', 'sort', 'uniq' e um liner / bin / sh para executar 'md5sum' para obtenha a assinatura de cada arquivo. Com a lista de assinaturas para os arquivos das duas estruturas de diretório, a sequência de comandos retornará os arquivos que são os mesmos:

encontre um / b / -type f -exec md5sum {} \; > / tmp / list; awk '{print $ 1}' '| awk '{print $ 2}' | sh -c 'enquanto lê s; faça awk "/ ^ $ s / {print \ $ 2}" / tmp / list; eco; feito'

Essencialmente, isso gera o md5sum para todos os arquivos no diretório 'a' e no diretório 'b'. As cadeias hexadecimais (primeira coluna) são alimentadas para um pipeline que filtra instâncias de apenas uma ocorrência para uma dada soma de verificação, passando o restante para um iterador / bin / sh que retira todos os arquivos reais correspondentes à soma de verificação (e insere 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 com o mesmo conteúdo, mas com nomes de arquivos diferentes.


Apenas os nomes devem ser comparados, sem somas de verificação.
Daniel Beck
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.