Introdução
O Windows 2000 e superior oferecem suporte a links simbólicos de diretório, onde um diretório serve como um link simbólico para outro diretório no computador. Por exemplo, se o diretório D: \ SYMLINK especificasse C: \ WINNT \ SYSTEM32 como destino, um aplicativo que acessa D: \ SYMLINK \ DRIVERS na realidade estaria acessando C: \ WINNT \ SYSTEM32 \ DRIVERS. Os links simbólicos do diretório são conhecidos como junções NTFS no Windows. Infelizmente, o Windows não possui ferramentas para criar junções - você precisa adquirir o Win2K Resource Kit, que acompanha o programa linkd para criar junções. Decidi, portanto, escrever minha própria ferramenta de criação de junções: Junction. A junção não apenas permite criar junções NTFS, mas também verificar se os arquivos ou diretórios são realmente pontos de nova análise. Os pontos de nova análise são o mecanismo no qual as junções NTFS se baseiam,
Leia este artigo da Microsoft KB para obter dicas sobre o uso de junções.
Observe que o Windows não suporta junções em diretórios em compartilhamentos remotos.
Se você deseja visualizar informações de nova análise, o uso de Junction é o seguinte:
Usando junção
Use junção para listar junções:
Uso: [-s]
-s subdiretórios Recurse
Exemplos:
Para determinar se um arquivo é uma junção, especifique o nome do arquivo:
junção c: \ test
Para listar junções abaixo de um diretório, inclua a opção –s:
junção -sc: \
Para criar uma junção c: \ Arquivos de Programas para "c: \ Arquivos de Programas":
C:> md Arquivos de Programa
C:> junção c: \ Arquivos de Programas "c: \ Arquivos de Programas"
Para excluir uma junção, use a opção –d:
junção -dc: \ Arquivos de Programas
Você não precisa necessariamente baixar programas adicionais para listar junções, links simbólicos e links físicos, mas se você tiver requisitos específicos de formato de saída, eles podem ajudar.
Liste todas as junções, links simbólicos e diretórios de links simbólicos no diretório atual e seus subdiretórios:
Ou se você quiser que eles sejam listados separadamente ...
Liste todas as junções no diretório atual e seus subdiretórios:
Liste todos os links simbólicos no diretório atual e seus subdiretórios:
Liste todos os diretórios de link simbólico no diretório atual e seus subdiretórios:
O
l
sinalizador de atributo é a chave aqui;l
é paraReparse Points
(junções, links simbólicos e diretórios de links simbólicos)Links físicos
Infelizmente,
dir
lista os links físicos como arquivos normais; portanto, você não pode usá-lo para identificar os links físicos. Você pode usar o embutidofsutil
. Ele precisa ser executado em um prompt de comando elevado.Com
fsutil
, liste todos os links físicos no diretório atual e seus subdiretórios:Este one-liner não é o ideal, e eu gostaria de receber quaisquer melhorias.
forfiles
com a opção de subdiretórios recurse (/s
) martelou minha CPU e demorou um pouco para ser concluído.fsutil
basicamente acaba rodando duas vezes; a primeira vez para identificar os links físicos contando o número de linhas de saída retornadas por cada chamada e a segunda vez nos links físicos recém-encontrados para obter a saída correta.uniq
.Aqui está um arquivo em lotes usado apenas
for
para identificar links físicos. Comoforfiles
não está envolvido, pode ser um pouco mais rápido, no entanto, ainda sofre as ressalvas restantes da linha única acima.Existem algumas outras opções (não testadas):
Use o utilitário Microsoft HL Scan (antigo)
Use o comando find alternativo que acompanha o kit de ferramentas do utilitário SFUA da Microsoft:
Use o utilitário findlinks da Sysinternals de maneira semelhante à
fsutil
mencionada acimaUse o programa ListLinks de Uwe Sieber - veja o link para uso
Use o NTFSLinksView da Nirsoft se você preferir um aplicativo GUI
fonte
A partir do Powershell 5+, o one-liner a seguir lista recursivamente todos os hardlinks de arquivos, junções de diretório e links simbólicos e seus destinos, a partir de
d:\Temp\
:Saída:
Se você se preocupa com vários destinos para links físicos, use esta variação que lista os destinos separados por tabulação:
Você pode precisar de privilégios de administrador para executar este script, digamos
C:\
.Para executar esses scripts a partir da linha de comando tradicional (cmd.exe):
Por exemplo:
fonte
dir 'd:\Temp' -recurse -force | ?{$_.LinkType -eq "Junction"} | select FullName,LinkType,Target
LinkType
não parece ser confiável para pontos de nova análise. Por exemplo, no meu computador executando W10 com PS 5.1,LinkType
é nulo para "C: \ ProgramData \ Desktop" e "C: \ Users \ All Users", enquanto quedir /aL
(Prompt de comando, não PowerShell) indica que o primeiro é um ponto de junção e o segundo um link simbólico.Os links físicos são melhor descritos como acima, mas para Links simbólicos e junções, o seguinte funciona bem:
Não estou usando nenhum novo comando aqui, mas ele melhora alguns listados, mostrando uma boa lista de cada link encontrado, no caminho, seu tipo (SymLink / Junction) e o caminho do Link e o caminho de destino.
Existem alguns bons acima, mas eles apenas fornecem o caminho TARGET, e geralmente você deseja excluir o link, e não o destino, ou correlacionar todos os links e destinos.
Para obter o Tipo, Link e Destino, você pode usar o seguinte no CMD:
Exemplo de saída:
fonte
O Far Manager 3.0 pode procurar e exibir links simbólicos e pontos de junção diferentes dos arquivos e diretórios. (Ele pode fazer muitas outras coisas.) Também pode procurar por links físicos.
ALT+ F7=> [x] Usar filtro => Filt er =>Ins
Escolha os atributos que você deseja.
fonte
LinkMagic2.exe (lista mágica de junções) também é bom.
Eu excluí por engano todos os meus
c:\user
links de junção, como dados de impressão, nethood e aplicativos, quando instalei o Windows 7 pela primeira vez há 2 anos, porque pensei que eles foram colocados por engano na instalação. O que eles realmente querem é a compatibilidade com versões anteriores e, ao pesquisar na Internet, vejo que alguns tiveram problemas ao tentar fazer certas coisas sem esses pontos de junção.fonte