Como localizar arquivos que não possuem uma duplicata em um diretório separado

4

Eu tenho um backup antigo de documentos. No meu diretório Documents atual, muitos desses arquivos existem em locais diferentes com nomes diferentes . Eu estou tentando encontrar uma maneira de mostrar quais arquivos existem no backup que não existem no diretório Documents , de preferência bom e GUI-y para que eu possa facilmente visualizar um lote de documentos.

Quando procuro essa pergunta, muitas pessoas estão procurando maneiras de fazer o oposto. Existem ferramentas como FSlint e DupeGuru , mas eles mostram duplicatas. Não há modo de inversão.

    
por Redsandro 05.05.2016 / 13:36

2 respostas

4

Se você está pronto para usar o CLI, o seguinte comando deve funcionar para você:

diff --brief -r backup/ documents/

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

Como 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 denunciar apenas quando os arquivos forem diferentes (e não informar a 'diferença' real), você poderá usar a opção --brief 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 meld , que podem fazer a mesma coisa. Você pode instalar meld do repositório do universo:

sudo apt-get install meld

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

fdupes é um programa excelente para encontrar os 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 saída fdupes usando uma combinação de find e grep .

O exemplo a seguir lista os arquivos exclusivos de 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
    
por Ron 05.05.2016 / 15:01
1

Eu percebi que o melhor fluxo de trabalho para mesclar backups antigos com milhares de arquivos, arquivados em diretórios diferentes com nomes diferentes, é usar DupeGuru afinal de contas. Parece muito com a guia duplicatas de FSlint , mas tem o recurso mais importante de adicionar fontes como 'referência' .

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

Se você tiver vários diretórios de backup antigos, convém mesclar o diretório de backup mais novo como este primeiro e usar esse diretório de backup como referência para limpar suas cópias dos backups mais antigos antes de mesclar los para o diretório principal do documento. Isso segura um lote de trabalho em que você não precisa remover arquivos exclusivos que deseja descartar em vez de mesclar a partir dos backups.

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

    
por Redsandro 14.05.2016 / 14:31