Três grandes maneiras de tornar mais flexível a manipulação de arquivos ou pastas são: trabalhar com link simbólico (symbolic link), link real (hard link) e junção de diretório (junction point ou soft link). MKLINK é uma ferramenta que permite esse tipo de manipulação e já vem no Windows Vista, Windows 7, Windows Server 2008 e 2008 R2.
Confira abaixo o conceito com exemplos práticos e ilustrados de cada uma dessas três alternativas de se trabalhar com arquivos e/ou pastas.
Link Simbólico (Symbolic Link):
É um tipo de atalho avançado, geralmente usado para facilitar o acesso a outras pastas (pastas locais ou compartilhadas em rede).
Uma aplicação prática é você vincular a uma pasta local (ex.: C:\Dados) o conteúdo de uma pasta compartilhada em rede (ex.: \\V-MARMA7B\Dados).
Se você abrir o Prompt de Comandos (clicando com o botão direito do mouse no atalho e escolhendo a opção “Executar como Administrador”) e executar o seguinte comando…
MKLINK /D C:\Dados \\V-MARMA7B\Dados
… da próxima vez que você, ou alguma aplicação, tentar acessar o caminho C:\Dados o Windows 7 vai listar o conteúdo disponível em \\V-MARMA7B\Dados, podendo navegar nas subpastas como se fosse numa unidade mapeada de rede. Só que para o sistema de arquivos o comportamento é o mesmo como se os dados estivessem armazenados localmente.
Se você consultar as propriedades da pasta C:\Dados verá as propriedades de um atalho (figura abaixo, à esquerda). Compare com a tela de propriedades do compartilhamento \\V-MARMA7B\Dados (figura abaixo, à direita)
Se você apagar diretamente a “pasta” C:\Dados nada vai ocorrer com os arquivos armazenados na pasta compartilhada em rede porque é apenas um “link simbólico”.
Importante: O link simbólico suporta caminho relativo, e não apenas caminho absoluto.
Você também pode criar link simbólico de arquivos. A sintaxe é a mesma.
Junção de Diretório (Junction Point):
É similar ao Link Real (próximo tópico), mas suporta apenas Pastas, sendo que elas podem estar em partições diferentes (desde que locais, mas não em pastas compartilhadas em rede).
Um exemplo de uso é o próprio Windows 7 que tem uma junção de diretório chamada “C:\Documents And Settings” apontada para a pasta “C:\Users”. Dessa maneira se alguma aplicação antiga tenta procurar o perfil de usuário no caminho “C:\Documents And Settings\Marcelo” o Windows 7 vai buscar essa informação em “C:\Users\Marcelo”.
Se por acaso você tem aplicações antigas que teimam eu usar a pasta “C:\Arquivos de Programas” (em Português) independente do idioma do Windows isso pode ser um problema. O Windows 7, independente do idioma usado, só tem a pasta “C:\Program Files” (por mais que o Windows Explorer mostre essa pasta no idioma atual o nome real da pasta é sempre em Inglês). Para contornar esse possível problema causado por aplicações antigas você pode criar uma Junção de Diretório chamada “C:\Arquivos de Programas” apontando para “C:\Program Files”. O comando é:
MKLINK /J “C:\Arquivos de Programas” “C:\Program Files”
Com isso se você (ou alguma aplicação) tentar acessar ou manipular informações usando o caminho, por exemplo, “C:\Program Files\Internet Explorer” ou “C:\Arquivos de Programas\Internet Explorer” o destino será o mesmo.
Se você consultar as propriedades de “C:\Program Files” (figura abaixo, à esquerda) e “C:\Arquivos de Programas” (figura abaixo, à direita) verá o mesmo conteúdo. As únicas diferenças serão o ícone da pasta (ícone de atalho, apesar de não ser um atalho tradicional) e a data de criação.
Note que a Junção de Diretório não é tratada como um atalho da mesma forma que é tratado o Link Simbólico.
Link Real (Hard Link):
Esse recurso não cria um atalho, mas sim outra representação no sistema de arquivos, sobre um arquivo específico que já existe na mesma partição (não vale para pastas). Qualquer mudança que você fizer em qualquer uma das entradas desse arquivo vai refletir em todos os pontos representados.
Vamos supor que você tem um arquivo de 10MB chamado LIB.DLL na pasta C:\DATA e outro arquivo idêntico na pasta C:\DATA\LIB. Com isso você estaria usando um total 20MB de espaço em disco.
Se você substituir um desses arquivos por um Link Real (Hard Link) você ainda terá um arquivo em cada uma dessas pastas, mas ocupando um total de 10MB.
A sintaxe seria:
MKLINK /H C:\DATA\LIB.DLL C:\DATA\LIB\LIB.DLL
Se consultarmos as propriedades dos dois arquivos veremos que o Windows mostra cada um ocupando 10MB cada, mas na verdade os dois juntos ocupam no total 10MB ao invés de 20MB.
Não acredita? Faça esse mesmo processo com um arquivo grande (na casa de GB), mas anote o espaço livre no seu HD antes e depois de rodar o MKLINK. Você vai se surpreender com o resultado.
Qual é agora o arquivo “original” e qual é a “cópia”? Na prática tanto faz… Se você apagar o arquivo LIB.DLL da pasta C:\DATA e tentar acessar o da pasta C:\DATA\LIB ele ainda estará lá. Se você apagar o arquivo da pasta C:\DATA\LIB e tentar acessar o da pasta C:\DATA ele ainda estará lá. Efetivamente o arquivo só vai “sumir” se você apagar todas as suas referências.
Um ótimo uso de Link Real (hard link) é a ferramenta User State Migration Tool (USMT). Ela permite migração de Sistema Operacional (ex.: migração de Windows XP para Windows 7) em um mesmo PC sem gastar horas com o processo de backup. O que o USMT faz nesse cenário é o backup dos arquivos usando hard link em uma pasta à parte, daí o setup do Windows 7 limpa a partição e faz uma instalação clean, e depois o USMT restaura as referências dos arquivos dos usuários nos locais adequados. O tempo dedicado ao backup/restore desse processo dura cerca de 5-10 minutos independente se o usuário tem 20, 100, 200GB de dados.
Para conhecer outras ferramentas de linha de comando do Windows acesse a documentação gratuita http://bit.ly/wincmds
Boa noite… executei os comandos com sucesso. Mais ficou a duvida de como remover esses links. Por acaso voce ja fez esse procedimento?
Obrigado
Paulo, basta apagar com um simples Delete.
No caso de pastas é fácil identificar o link porque há mudança no ícone (parece um ícone de atalho), mas no caso de hardlink para arquivo você consegue saber se o arquivo tem algum vínculo através da ferramenta fsutil: você deve abrir o Prompt de Comandos como administrador e executar: fsutil hardlink list
Excelente dica
Muito bom, cara. Meus parabéns!
Olá,
estou procurando uma forma de “dizer” para o InSync, um programa de sincronia para ser usado com o Google Docs, quais devem ser os diretórios a serem sincronizados. O que acontece é que o programa não oferece a opção de selecionar os diretórios que quero sincronizar, para isso pensei em usar o mklink para criar um link entre os vários diretórios onde mantenho documentos e o que o programa usa como padrão para fazer a sincronia.
No caso, o diretório que o InSync usa é o “D:\Meus Documentos\Insync\e-mail@gmail.com\”. Os documentos que quero subir pro Google Docs estão em subdiretórios do “Meus documentos”, por isso gostaria de criar links entre cada um deles e o do InSync.
É possível “linkar” mais de um diretório com outro usando o mklink? Por exemplo, dentro de “Meus documentos” tenho os diretórios “Faculdade”, “Pós-Graduação”, “Vários”, “My eBooks”, enfim… teria como eu criar o link entre esses quatro diretórios e o “insync\e-mail@gmail.com\” ou essas associações só podem ser feitas entre um único diretório e seu destino?
Obrigado,
Artur
Artur, se você criar um link para a pasta “Meus Documentos” todas as subpastas irão junto. Se você precisa apenas algumas subpastas será preciso criar o link para cada uma delas.
Tente usar o MKLINK /J para criar esses links e veja se o InSync vai funcionar assim.
O resultado final será “insync\e-mail@gmail.com\Faculdade”, “insync\e-mail@gmail.com\Pos-Graduacao”, etc… com um link para cada pasta.
Olá, Marcelo,
muito obrigado pela resposta rápida.
Desculpa a amolação, mas antes de testar eu gosto de pensar sobre o assunto, por isso escrevi antes de tentar aplicar o comando e o que me deixou em dúvida sobre colocar toda a pasta “Meus Documentos” vinculada à pasta do InSync é que o InSync cria automaticamente sua pasta dentro de “Meus Documentos” e não permite que seja alterada. Se eu fizer o vínculo de “Meus Documentos” com uma pasta que está dentro de “Meus Documentos” isso não vai criar um loop? Ou, hoje em dia, os sistemas já estão mais “espertos” e conseguem lidar com esse tipo de situação.
Por isso pensei em criar vínculos individuais de cada uma das pastas com a “insync\e-mail@gmail.com\” mas ficou a dúvida sobre a possibilidade de vincular múltiplas pastas com uma única pasta de destino, mas se entendi sua resposta, é possível fazer isso, certo?
Mais uma vez, obrigado,
Artur
Como eu não conheço o InSync não sabia que já criava uma pasta dentro do “Meus Documentos”. Nesse caso o teste é criar uma junção para cada pasta que você deseja sincronizar.
Olá Marcelo,
primeiramente, bom 2012!
tentei usar o mklink/j, mas o comando não funcionou. Voltou a mensagem “não é possível criar um arquivo já existente”. Será que o fato de o diretório do Insync conter um @ pode interferir no comando?
Bom, se não tiver mesmo como fazer isso, vou acabar movendo as pastas pra dentro da pasta do Insync e pronto… não é o q eu gostaria de fazer, mas se é o único jeito, paciência.
Muito obrigado pela ajuda.
Artur
Artur, quais comandos você está tentando executar (sintaxe completa)?
Olá Marcelo, comigo aconteceu o mesmo que com o Arthur, e as pastas eram as que pode conferir abaixo.
C:\WINDOWS\system32>mklink /J “C:\Program Files (x86)\Adobe” “D:\Program Files (x86)\Adobe”
Não é possível criar um arquivo já existente.
Bom dia Marcelo
MInha dúvida:
Preciso criar um link de uma pasta em C: para a pasta do dropbox (também em C:). Isso está em um servidor.
Cada vez que o arquivo é modificado na pasta “x” em C: (pois roda um fortran que a saída é nessa pasta) ele pega e leva para dropbox. Então eu consigo acessa do meu computador pessoal já que dropbox é compartilhado.
No servidor, quando eu atualizo o arquivo na pasta “x” em C: ele automaticamente cria ou substitui na pasta do dropbox.
O problema é que ele não passa para o meu computador pessoal….Conseguiu entender?
Já o processo inverso, ou seja se eu jogo arquivo no dropbox do meu pc pessoal, ele automaticamente vai pra pasta dropbox do servidor e consequentemente cria na pasta “x” do servidor.
Tem alguma ideia de pq os arquivos da pasta dropbox não sincronizam?
abraço
Paulo, o link simbólico (primeiro exemplo do meu artigo) não vai trazer o conteúdo do servidor para o seu PC. Ele vai apenas trazer um tipo de “atalho”. Se o conteúdo for alterado no servidor você vai automaticamente ver esse conteúdo a partir do seu PC. No entanto, caso você queira acessar, a partir do seu PC, esse caminho do servidor mesmo quando estiver sem rede será necessário tornar essa pasta disponível em modo offline, a partir do Windows do seu PC.
Marcelo
Estou tentando criar um link real e sempre recebo a mensagem: Não é possível criar um arquivo já existente. Minha sintaxe é:
mklink /j “C:\Users\whitewarrior\AppData\Local\Microsoft\Windows Live Mesh” “D:\WLM Holding Area”
Douglas, esse erro ocorre quando a primeira pasta indicada na sintaxe do mklink já existe, no caso “C:\Users\whitewarrior\AppData\Local\Microsoft\Windows Live Mesh”.
Para que a junção de diretório funcione a primeira pasta indicada na sintaxe não pode existir, pois essa referência será criada pelo mklink nesse momento.
Marcelo
Olá Marcelo. Obrigado pela resposta. Agora sim entendi a lógica do negócio.
Copiei os arquivos para a segunda pasta e excluir a primeira e agora está funcionando.
O WLM estava utilizando mais de 30Gb de arquivos temporários, lotando o HD.
Obrigado amigo. funcionou, estou conseguindo linkar pastas fora do dropbox no dropox.
Bom dia Marcelo,
Criei um mklink para a pasta de usúario do windows 7, movi c:\users\geovani para D:\geovani.
Estava tudo perfeito até que deu um erro no sistema e quando voltou meu usuário entra em um perfil temporário. Vi que meus arquivos estão todos dentro da pasta D:\geovani.
Poderia criar outro usuário e criar um mklink para esta pasta, porém teria que configurar outlook e outros novamente.
Teria como concertar esse problema voltando meu perfil como estava antes?
Obrigado.
Geovani, você já tentou criar novamente o link? O ideal para mudra a pasta/unidade do perfil é através de perfil móvel, e não com links.
Marcelo
Por favor estou com um problema, eu fiz isso e funcionou, porém depois de uns 3 meses os links simbólicos sumiram, ou seja, o ícone de atalho sumiu, porém o sistema operacional ainda funciona, como faço para exibi-los novamente? isso esta dando problema na hora de instalar e executar programas, aff ta tenso aqui, quem puder me mande um e-mail arielxaron@gmail.com
Deixa eu ver se entendi a diferença entre o link real e o link simbólico (abreviando LR e LS respectivamente), se tratando de um único arquivo. Considerando que os arquivos que vemos na interface do sistema operacional são na verdade referências a um endereço de dados no disco, o LS é na verdade uma referência à referência original do arquivo… é como se fosse um ponteiro de ponteiro. Já o LR na verdade cria uma nova referência ao mesmo endereço de dados da referência original, como uma duplicata, e é por isso que deletar o arquivo de um LS invalida o link, mas um LR continua valendo – já que deletar um arquivo, na verdade, não deleta fisicamente os dados, apenas deleta aquela referência a ele.. já alterar um arquivo, independentemente de ser por um LR, LS ou pela referência original, sempre alterará a mesma porção de dados, que é idêntica para todas as referências.
Estou correto? Se sim, este post foi de enorme ajuda pra minha compreensão. Obrigado!
É isso mesmo!
Ola Marcelo,
Poderia me ajudar, tenho uma pasta aqui que uso no meu dropbox da faculdade e quero espelhar a mesmo no meu drive, já tentei usar o mklink mas dá a mensagem de não ser possivel criar algo existente, poderia me ajudar?
Obrigado
Qual exatamente é o commando que você está executando, e qual o resultado esperado?
Agradeço pela ajuda, mas acabei comprando um serviço para este gerenciamento.
Muito Bom! Parabens
Muito bem explicado. Parabéns pelo site.
Deixa eu ver se entendi, se um arquivo existe em uma partição D: e faço uma junção de diretório em C:, os dados ficam guardados em D:(na área de D: no disco rígido) e o sistema faz uma referencia em C:. Estou correto? Perdi arquivos em uma “possível formatação” (é uma longa história) e não posso correr o risco de sobrescrever os arquivos pedidos em C:.
Interessante observar que se um link real for feito para um arquivo compactado e seu conteúdo for alterado, a copia pode não ser alterada também, visto que a forma de alteração de um compactado é a recompactação em outro arquivo temporário do que ficou e a substituição do original pelo novo.
Neste caso, as referências na FAT serão diferentes e, com isso, arquivos distintos e ocupando espaços distintos.
Excelente explicação, uso o MKLINK faz um bom tempo.Com não perco mais nenhum dado do meus programas, faco um link para outra partição, assim nunca perco minhas configurações dos meus aplicativos depois de formatar o computador.
Valewwwwwwwwwwww me ajudou bastante aqui
deixei uma pergunta nos comentários e até agora não foi publicada..
Bom dia, vamos ver se consegue me ajudar. Fiz um mklink /d para subir um backup do meu notebook para o OneDrive, foi tudo correto, perfeito. Agora necessito que no outro pc, que tem os mesmos arquivos, também seja feita a junção nesta mesma pasta criada no OneDrive, ou seja, o que eu mudar no Notebook, vai atualizar o OneDrive que por sua vez vai atualizar meus arquivos que estão na partição D:. Porém, não estou conseguindo gerar o mklink /d no pc. Ele informa que não é possível criar um arquivo já existente. Poderia me ajudar? Obrigado.
Muito obrigado pela dica, me ajudou a resolver o problema que eu tinha aqui na empresa com o famigerado por espaço itunes e seu diretório de backup que não pode ser alterado de local…Como aqui todas minhas estações tem unidades SSD ou de 120GB ou de 240GB, para alguns usuários de iPhone o backup já tinha se tornado um problema. O que fiz foi criar um link simbólico (mklink /D) para a unidade de rede que cada usuário tem no servidor, e em estações que posuiam uma segunda unidade local com espaço grande, eu criei uma junção (mklink /J). Fica a dica para quem quiser alterar o local de gravação de backup do iTunes.
Aqui em plena Pandemia do Coronavírus (27/02/2021) acessando esse Post depois de uma limitação na configuração do iCloud, nuvem da Apple. Post com ótima explicação e fácil entendimento, bem didático e de grandíssima utilidade Está de parabéns pela iniciativa em manter online o site.