Como substituir todos os arquivos duplicados por links físicos?

17

Eu tenho duas pastas contendo vários arquivos. Alguns dos arquivos da primeira pasta têm uma cópia exata na segunda pasta. Eu gostaria de substituir aqueles com um link físico. Como posso fazer isso?

    
por qdii 04.05.2015 / 22:13

4 respostas

17

Eu conheço 4 soluções de linha de comando para o Linux. A minha preferida é a última listada aqui, rdfind , por causa de todas as opções disponíveis.

fdupes

  • Este parece ser o mais recomendado / mais conhecido.
  • É o mais simples de usar, mas sua única ação é excluir duplicatas.
  • Para garantir que as duplicatas sejam realmente duplicadas (embora não demorem para serem executadas), as comparações entre os arquivos são feitas primeiro pelo tamanho do arquivo, depois pelo md5 hash e pela comparação bye by byte.

Exemplo de saída (com opções "show size", "recursive"):

$ fdupes -Sr .
17 bytes each:                          
./Dir1/Some File
./Dir2/SomeFile

hardlink

  • Projetado para, como o nome indica, substituir arquivos encontrados por hardlinks.
  • Possui uma opção --dry-run .
  • Não indica como o conteúdo é comparado, mas, ao contrário de todas as outras opções, leva em conta o modo de arquivo, o proprietário e o horário modificado.

Exemplo de saída (observe como meus dois arquivos têm tempos de modificação ligeiramente diferentes, portanto, na segunda execução, digo para ignorar isso):

$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500

$ hardlink --dry-run -v .
Mode:     dry-run
Files:    5
Linked:   0 files
Compared: 0 files
Saved:    0 bytes
Duration: 0.00 seconds

$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode:     dry-run
Files:    5
Linked:   1 files
Compared: 1 files
Saved:    17 bytes
Duration: 0.00 seconds

duff

  • Feito para encontrar arquivos em que o usuário age; não tem ações disponíveis.
  • As comparações são feitas por tamanho de arquivo e, em seguida, sha1 hash.
    • O hash pode ser alterado para sha256, sha384 ou sha512.
    • O hash pode ser desativado para fazer uma comparação byte a byte

Exemplo de saída (com opção "recursiva"):

$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File

rdfind

  • As opções têm uma sintaxe incomum (destinada a imitar find ?).
  • Várias opções de ações para executar arquivos duplicados (excluir, criar links simbólicos, criar hardlinks).
  • Tem um modo de funcionamento a seco.
  • As comparações são feitas por tamanho de arquivo, primeiro bytes, depois bytes finais e, em seguida, md5 (padrão) ou sha1.
  • A classificação de arquivos encontrados torna previsível qual arquivo é considerado o original.

Exemplo de saída:

$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.

$ cat results.txt 
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file
    
por 07.09.2015 / 08:51
4

Duplicate Commander é uma solução possível no Windows:

Duplicate Commander is a freeware application that allows you to find and manage duplicate files on your PC. Duplicate Commander comes with many features and tools that allow you to recover your disk space from those duplicates.

Features:

Replacing files with hard links
Replacing files with soft links
... (and many more) ...

ParaoLinux,vocêpodeencontrarumscriptBash aqui .

    
por 04.05.2015 / 23:03
1

Eu tinha uma ferramenta gratuita bacana no meu computador chamada Link Shell Extension; não só foi ótimo para criar Hard Links e Links Simbólicos, mas junções também! Além disso, adicionou ícones personalizados que permitem identificar facilmente diferentes tipos de links, mesmo aqueles que já existiam antes da instalação; Red Arrows representam Hard Links, por exemplo, enquanto Green representa Links Simbólicos ... e chains representam Junções.

Eu infelizmente desinstalei o software há algum tempo (em uma desinstalação em massa de vários programas), então não posso criar mais links manualmente, mas os ícones ainda aparecem automaticamente sempre que o Windows detecta um link Hard, Symbolic ou Junction.

    
por 03.05.2016 / 20:49
0

Duplicado & Same File Searcher é outra solução no Windows:

Duplicate & Same Files Searcher (Duplicate Searcher) is an application for searching duplicate files (clones) and NTFS hard links to the same file. It searches duplicate file contents regardless of file name (true byte-to-byte comparison is used). This application allows not only to delete duplicate files or to move them to another location, but to replace duplicates with NTFS hard links as well (unique!)

    
por 12.06.2018 / 22:46