Como encontrar arquivos que não possuem duplicatas em um diretório separado

Como encontrar arquivos que não possuem duplicatas em um diretório separado

Eu tenho um backup antigo de documentos. No meu Documentsdiretório atual, existem muitos desses arquivosem locais diferentes com nomes diferentes. Estou tentando encontrar uma maneira de mostrar quais arquivos existem no backup que fazemnãoexiste no Documentsdiretório, de preferência agradável e GUI-y para que eu possa facilmente ter uma visão geral de ummuitode documentos.

Quando procuro essa pergunta, muitas pessoas procuram maneiras de fazer o oposto. Existem ferramentas comoFSlinteDupeGuru, mas eles mostram duplicatas. Não há modo de inversão.

Responder1

Se você estiver pronto para usar a CLI, o seguinte comando deverá funcionar para você:

diff --brief -r backup/ documents/

Isso mostrará os arquivos exclusivos de cada pasta. Se desejar, você também pode ignorar casos de nomes de arquivos com o--ignore-file-name-case

Como um exemplo:

ron@ron:~/test$ ls backup/
file1  file2  file3  file4  file5
ron@ron:~/test$ ls documents/
file4  file5  file6  file7  file8
ron@ron:~/test$ diff backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8
ron@ron:~/test$ diff backup/ documents/ | grep "Only in backup"
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3

Além disso, se quiser relatar apenas quando os arquivos diferem (e não relatar a 'diferença' real), você pode usar a --briefopção como em:

ron@ron:~/test$ cat backup/file5 
one
ron@ron:~/test$ cat documents/file5
ron@ron:~/test$ diff --brief backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Files backup/file5 and documents/file5 differ
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8

Existem várias ferramentas de comparação visual como meldessas que podem fazer a mesma coisa. Você pode instalar melda partir do repositório do universo:

sudo apt-get install meld

e use a opção "Comparação de diretórios". Selecione a pasta que deseja comparar. Após a seleção, você pode compará-los lado a lado:

insira a descrição da imagem aqui

fdupesé um excelente programa para localizar arquivos duplicados, mas não lista os arquivos não duplicados, que é o que você está procurando. No entanto, podemos listar os arquivos que não estão na fdupessaída usando uma combinação de finde grep.

O exemplo a seguir lista os arquivos exclusivos do backup.

ron@ron:~$ tree backup/ documents/
backup/
├── crontab
├── dir1
│   └── du.txt
├── lo.txt
├── ls.txt
├── lu.txt
└── notes.txt
documents/
├── du.txt
├── lo-renamed.txt
├── ls.txt
└── lu.txt

1 directory, 10 files
ron@ron:~$ fdupes -r backup/ documents/ > dup.txt
ron@ron:~$ find backup/ -type f | grep -Fxvf dup.txt 
backup/crontab
backup/notes.txt

Responder2

Tive o mesmo problema com muitos arquivos muito grandes e há muitas soluções para duplicatas, mas não para pesquisa invertida, e também não queria pesquisar diferenças de conteúdo devido à grande quantidade de dados.

Então eu escrevi este script python para procurar por "arquivos isolados"

isolated-files.py --source folder1 --target folder2

isso mostrará todos os arquivos (recursivamente) na pasta2 que não estão na pasta1 (também recursivamente). Também pode ser usado em conexões ssh e com múltiplas pastas.

verhttps://github.com/ezzra/arquivos isolados

Responder3

Achei que o melhor fluxo de trabalho para mesclar backups antigos com milhares de arquivos arquivados em diretórios diferentes com nomes diferentes é usardupeGuruafinal. Parece muito com oduplicatasguia deFSlint, mas tem o recurso extra importante de adicionar fontes como'referência'.

  1. Adicione seu diretório de destino (por exemplo ~/Documents, ) como umreferência.
    • Areferênciaé somente leitura e nenhum arquivo será removido
  2. Adicione seu diretório de backup comonormal.
  3. Encontre duplicatas. Remova todas as duplicatas encontradas no backup.
  4. Você fica apenas com arquivos exclusivos no diretório de backup. UsarFreeFileSyncouCombinarpara mesclá-los ou mesclá-los manualmente.

Se você tiver vários diretórios de backup antigos, faz sentido mesclar o diretório de backup mais recente como este primeiro e depois usar esse diretório de backup como umreferênciapara limpar as duplicatas dos backups mais antigos antes de mesclá-los no diretório principal do documento. Isso protege ummuitode trabalho onde você não precisa remover arquivos exclusivos que deseja descartar em vez de mesclar dos backups.

Lembre-se de fazer um novo backup depois de destruir todos os backups antigos no processo. :)

Responder4

jdupestem duas opções úteis para isso: -I --isolatee -u --print-unique.

Por exemplo, para listar arquivos exclusivos apenas no backupdiretório:

jdupes -Iru Documents backup |grep '^backup

informação relacionada