Desfaça a criação de links simbólicos copiando o original, renomeando o arquivo e excluindo o link

Desfaça a criação de links simbólicos copiando o original, renomeando o arquivo e excluindo o link

Usei um utilitário do Windows 7 para excluir arquivos duplicados exatos de byte por byte e substituí-los por um link simbólico antes de saber que o tipo de link simbólico não é permitido em nosso domínio corporativo. Preciso de uma maneira de desfazer todas as alterações feitas, mas o programa não tem como fazer isso.

É possível escrever algum tipo de script que encontre os links, encontre o arquivo, remova o link e copie o arquivo de volta para a pasta e renomeie-o para corresponder ao nome dos links? Ou talvez um software que faça isso?

Obrigado por toda e qualquer ajuda.

Responder1

Este é o tipo de situação em que realmente compensa ter uma estratégia de backup bem planejada e mantida. Se for esse o caso da sua empresa, use-o.

O que você fez foi uma maneira ruim de economizar espaço. Considere o seguinte caso de uso:

  1. O usuário copia arquivos do compartilhamento Deptx em preparação para trabalhar neles
  2. Você joga as cópias dela e cria links simbólicos para as origens
  3. Ela modifica os originais que ainda eram exigidos por outros para seu trabalho
  4. ...

Se você tem pouco armazenamento, é melhor elaborar um plano de negócios para a compra de armazenamento adicional. Idealmente, uma solução que suporte a desduplicação em nível de bloco. Se o seu dispositivo existente oferecer desduplicação, você poderia ter enviado uma solicitação de alteração para aprovação para implementá-la - mas esse tempo já passou.

Uma nota para o futuro. Como administrador de armazenamento, você precisa informar a empresa quando chegar a hora de expandir o armazenamento, o que geralmente ocorre quando ele está meio cheio. Quando estiver 70% cheio, você pode começar a acionar o alarme de incêndio diariamente até que o orçamento seja atribuído. Se isso não acontecer, é hora de informá-los, numa reunião muito franca, que estão arriscando o negócio. Os dados são o núcleo dos negócios modernos.


Você pode identificar todos os links simbólicos com:

C:\Users\user>dir /AL /S C:\ | find "SYMLINK"
07/14/2009  01:08 AM    <SYMLINKD>     All Users [C:\ProgramData]

# Only one result in on my Windows 7 host, and it's a system default.
# There are likely more in Windows Server OSs.
# Cmd Explained:
# /AL   A Lists file with attribute:L (Symlinks and dir junctions)
# /S    Do recursively
# C:\   Drive to scan

'Todos os usuários' é o link simbólico 'C:\Users\All Users', que tem como alvo 'C:\ProgramData'. Observe que a saída do comando acima não fornece o caminho completo para o link simbólico de que você precisa.

<<< STOP >>> Se o número de links simbólicos for inferior a mil, pode valer a pena considerar substituí-los manualmente pelos arquivos de destino.

Você poderia usar NTFSLinksView. Parece ser capaz de exportar dados que incluem o destino completo e os caminhos do link simbólico.http://www.nirsoft.net/utils/ntfs_links_view.html

Depois de ter esses valores, você pode percorrê-los com este pedaço do Powershell. Modifique o delim para qualquer saída do programa. O exemplo define espaços como delimitador. Se usar vírgulas, use: ','. Certifique-se de que o cvs tenha apenas os dados Link e Target. Naquela ordem.

Nota: Isso não preserva os links simbólicos padrão...

Import-CVS -Delim ' ' -Path input.cvs -Header Link,Target | ForEach-Object {
cmd /c rmdir $Link
Copy-Item $Target $Link
}

AVISO: Isto não foi testado e tem potencial para causar ainda mais danos... Use por sua própria conta e risco. Se não existirem backups anteriores e você tiver chegado a esse resultado, faça um backup antes de prosseguir.

Responder2

Esse problema não se deve a uma política de domínio. É por causa de uma atualização do Windows que quebrou links simbólicos.este tópicome ajudou a entender o problema real. Após desinstalar a atualização e usar um prompt de comando para executar este comando:

conjunto de comportamento fsutil SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1

Consegui copiar a pasta superior para uma unidade USB local e recuperar os arquivos originais como arquivos com o nome original e desfazer a maior parte dos "danos" que causei.

Para quem desinstala a atualização e usa o comando acima, é preciso fazer as duas coisas nas duas máquinas para que os links funcionem corretamente. Só consegui fazer isso no computador que usei originalmente para desduplicar a pasta. Eu nem tenho certeza se tive que executar alguma ação para copiar os arquivos para uma unidade USB e fazer com que os links se comportassem de forma que eu recuperasse os arquivos originais. Neste ponto, corrigi o problema e não preciso prosseguir com a codificação que estava fazendo.

informação relacionada