Eu tenho duas pastas contendo vários arquivos. Alguns dos arquivos da primeira pasta possuem uma cópia exata na segunda pasta. Gostaria de substituir aqueles com um link físico. Como eu posso fazer isso?
Eu tenho duas pastas contendo vários arquivos. Alguns dos arquivos da primeira pasta possuem uma cópia exata na segunda pasta. Gostaria de substituir aqueles com um link físico. Como eu posso fazer isso?
Respostas:
Conheço 4 soluções de linha de comando para linux. O meu preferido é o último listado aqui rdfind
, devido a todas as opções disponíveis.
fdupes
Saída de amostra (com as opções "show size", "recursive"):
$ fdupes -Sr .
17 bytes each:
./Dir1/Some File
./Dir2/SomeFile
hardlink
--dry-run
opção. Saída de amostra (observe como meus dois arquivos têm tempos de modificação ligeiramente diferentes, então, na segunda execução, eu 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
Saída de amostra (com a opção "recursiva"):
$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File
rdfind
find
?).Saída de amostra:
$ 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
O Commander duplicado é uma solução possível no Windows:
Duplicate Commander é um aplicativo freeware que permite encontrar e gerenciar arquivos duplicados no seu PC. O Duplicate Commander vem com muitos recursos e ferramentas que permitem recuperar o espaço em disco dessas duplicatas.
Recursos:
Replacing files with hard links Replacing files with soft links ... (and many more) ...
Para Linux, você pode encontrar um script Bash aqui .
O Duplicate & Same File Searcher é outra solução no Windows:
O Duplicate & Same Files Searcher (Duplicate Searcher) é um aplicativo para pesquisar arquivos duplicados (clones) e links físicos NTFS para o mesmo arquivo. Ele pesquisa o conteúdo duplicado do arquivo, independentemente do nome do arquivo (é usada uma comparação verdadeira de byte a byte). Este aplicativo permite não apenas excluir arquivos duplicados ou movê-los para outro local, mas também substituir duplicados por links físicos NTFS (exclusivos!)
Eu tinha uma ferramenta bacana no meu computador chamada Link Shell Extension; não só foi ótimo para criar links físicos e links simbólicos, mas também junções! Além disso, adicionou ícones personalizados que permitem identificar facilmente diferentes tipos de links, mesmo aqueles que já existiam antes da instalação; Setas vermelhas representam Links físicos, por exemplo, enquanto Verde representam Links simbólicos ... e cadeias representam Junções.
Infelizmente, eu desinstalei o software há algum tempo (em uma desinstalação em massa de vários programas), então não consigo criar mais links manualmente, mas os ícones ainda aparecem automaticamente sempre que o Windows detecta um link Difícil, Simbólico ou de Junção.
Eu recomendo jdupes . É uma bifurcação aprimorada de fdupes , mas também inclui:
--linkhard
, ou -L
abreviadoPara sua pergunta, você pode apenas executar $ jdupes -L /path/to/your/files
.
Você pode clonar e criar a fonte mais recente do repositório GitHub, pois o projeto ainda está em desenvolvimento ativo.
Os binários do Windows também são fornecidos aqui. Binários empacotados estão disponíveis em algumas distribuições Linux / BSD - na verdade, eu o encontrei pela primeira vez $ apt search
.