Como faço para remover um diretório do Windows sem seguir os pontos de junção?

StackOverflow https://stackoverflow.com/questions/2003174

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu tenho um script Perl que precisa excluir um diretório com todo o seu conteúdo. Às vezes, este diretório contém um ponto de junção em outro diretório. Se eu rmtree() ingenuamente, a chamada rmtree() também irá apagar todos os arquivos dentro da pasta de destino da junção. Eu estou procurando uma maneira de não fazer isso, e em vez disso basta remover a junção.

Soluções não Perl também seria apreciada.

Foi útil?

Solução

eu digitei "ponto de junção" no Google e encontrei meu caminho para http://en.wikipedia.org/wiki/NTFS_junction_point

Command Prompt (cmd)

  • O dir de comando no Windows 2000 ou posterior reconhece os pontos de junção, exibindo em vez de listagens de diretórios (uso dir com o / A ou / AL opção de linha de comando).
  • Qualquer comandos que normalmente afetam arquivos dentro de uma vontade diretório normais agir da mesma aqui. Assim, o comando del myjunction não deve ser utilizado - isso só vai apagar todos os arquivos em o diretório de destino.
  • Os comandos rmdir e movimento funcionam bem com entroncamentos, com a ressalva de que o movimento não vai deixar o movimento de junção para outra o volume (em oposição ao Windows Explorer, como mencionado acima.)
  • A comando rmdir é seguro em que só elimina o ponto de junção, não o arquivos alvo. Enquanto pelo o diretório com a linha de comando Interface, arquivos podem ser excluídos, mas ao contrário explorador, diretórios também pode ser suprimido (usando rmdir / s para nomedir exemplo).
  • Usando o comando linkd com o parâmetro / d é uma maneira segura para apagar pontos de junção.

Do que eu posso ver que você pode, por exemplo, o uso dir e grep a saída para <JUNCTION> ou usar o rmdir do Windows. Eu acho que você pode usar qualquer um destes a partir de Perl via system.

Outras dicas

Para saber onde estão os pontos de nova análise (ou "pontos de junção", se você preferir):

dir /a:l /b > myjunctions.txt

Vai mostrar todos os pontos de nova análise no diretório atual. Você pode adicionar / s, mas cuidado com que os pontos de nova análise dentro pontos de nova análise será listado também.

myjunctions.txt Suponha que contém a linha x: \ subdir \ foo. Para removê-lo, você emitir

fsutil reparsepoint "x:\subdir\foo"

E voilá! O seu ponto de junção se foi, e o diretório original é intocável!

utilidade FastCopy faz isso: http://ipmsg.org/tools/fastcopy.html.en

Eu estou usando este programa para copiar ou apagar pastas que podem conter junções como subpastas para que as metas de junção permanecem intocados. Os pontos de junção estão devidamente copiado durante a cópia, mesmo quando a unidade de destino é diferente.

Windows Explorer, pelo menos no Windows 7 Ultimate funciona também como queria durante a exclusão - alvos de junção permanecem intactos.

Mas copiar pastas que contêm junções como subpastas em Explorer ainda não funciona como pretendido - ele realmente faz algo que eu ainda não pode talvez bastante inteiramente descrever: as pastas de junção parecem ser copiado como pastas normais, mas seu conteúdo é vazio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top