Em um de nossos servidores de arquivos do Windows 2003, de alguma forma, alguém ou algo conseguiu criar árvores de diretórios infinitamente recorrentes em algumas das pastas iniciais dos usuários e não pode ser excluído.
Você acaba com algo assim:
D:\Student\2012\user.name\servername\student\2012\user.name\servername\student\2012\...
E continua infinitamente até onde pude dizer.
Tentar excluir a árvore de diretórios do sistema em que reside resulta em "Erro ao excluir arquivo ou pasta: Não é possível excluir o arquivo:". Tentar excluí-lo de um sistema Windows 7 conectado ao compartilhamento de rede resulta em um erro "pasta em uso".
Se você navegar pela árvore de diretórios o mais longe possível, alcançará um diretório que não pode ser aberto ou excluído (se clicar com o botão direito do mouse, nenhuma das opções padrão aparece); no entanto, se você tentar abrir o mesmo diretório de um compartilhamento em outro sistema Ele pode ser aberto, no entanto, o Windows Explorer fica extremamente lento.
Eu tentei as sugestões deste post, além de inicializar o servidor com um disco Linux e tentar rm -rf o diretório, nem funcionou.
É um mistério.
Editar: Eu também posso acrescentar que é possível renomear os diretórios, apenas não removê-los.
Respostas:
Eu também tinha uma pasta interminável recursiva criada por um IDE java e não conseguia excluí-la no Windows Explorer ou no prompt do cmd.
No entanto, quando instalei o git, também instalei o git-bash. No git-bash, você pode emitir o comando:
e vai cuidar disso.
fonte
É possível que exista um link simbólico para uma pasta em algum lugar, provavelmente o segundo
student
no seu caminho.Tente executar o comando:
e veja se
student
está marcado como DIR ou SYMLINK / JUNCTION.Por exemplo, esta é uma saída típica do
dir
comando:Você vê que as duas primeiras entradas estão marcadas como
DIR
, enquanto a terceira (um link simbólico para outra pasta) está marcada comoSYMLINKD
. No seu caso (Windows 2003), acho que existemJUNCTION
s em vez deSYMLINK
s.Se a
student
pasta for um link ou junção simbólica, execute os comandos:e assim se livrar da recursão.
fonte
É possível que quem estava trabalhando nessa pasta consiga criar um ponto de junção que faça um loop de volta
user.name
paraservername
, criando assim uma árvore de diretórios 'loop infinito'.As junções são um recurso do sistema de arquivos NTFS que permite criar um link simbólico para um diretório que opera como um alias para o diretório. http://en.wikipedia.org/wiki/NTFS_junction_point
Você pode ver na seção "Efeitos observados" da página wiki o problema que você descreve.
Tente executar este utilitário para listar junções nesse servidor:
http://technet.microsoft.com/en-us/sysinternals/bb896768
Também deve permitir a exclusão do ponto de junção.
fonte
Eu tive um problema semelhante quando o eclipse criou uma árvore de pastas massivamente profunda que não consegui excluir. No entanto, como era possível mover e renomear pastas, escrevi um arquivo em lotes para trabalhar. Para uma árvore de pastas aparentemente infinitamente profunda de FOLDERNAME no diretório C, ou seja,
Arquivo em lote:
Isso funciona porque o TEMPFOLDERNAME agora é uma árvore de tamanho finito (uma única pasta sem nada) e a enorme árvore FOLDERNAME tem uma pasta a menos toda vez que o loop é executado, chegando finalmente ao fundo, removendo uma pasta na parte superior.
fonte
Corri para o mesmo problema com uma confusão de pastas com mais de 5000 diretórios que algum aplicativo Java fez e escrevi isso:
https://gitlab.imanolbarba.net/imanol/DiREKT
Ele removeu a coisa toda depois de um tempo, mas conseguiu fazer o trabalho, espero que ajude as pessoas que (como eu) enfrentam o mesmo problema frustrante
fonte
Resolvi meus diretórios de loop infinito com este script:
fonte
Eu tive o mesmo problema. A pasta que eu queria excluir continha uma árvore interminável de links com o mesmo nome e cada tentativa de excluí-la fazia com que o Windows lançasse um erro "Arquivo muito longo ...". Ele falhou independentemente do comando que eu tentei, incluindo todos os métodos acima, então tentei o comando "rm" do Cygwin em uma janela do cmd logo acima da pasta em questão. Eu digitei "rm -r -f [folder]" e a pasta foi excluída sem reclamar.
Você pode fazer o download gratuito do Cygwin em https://cygwin.com/install.html . É basicamente um shell UNIX para Windows que contém todos os comandos comuns (por exemplo, ls, rm, du e cat), mas também possui uma tonelada de pacotes que, se todos foram baixados, ocupariam cerca de 1 GB de espaço. Eu acredito que o pacote de download padrão inclui os comandos UNIX. Caso contrário, eles estão no pacote "utils" se a memória servir.
NOTA: Você não precisa executar os comandos do Cygwin em sua janela nativa do bash shell. Eles podem ser executados em uma janela do cmd adicionando o caminho ao diretório "bin" do cygwin à variável de ambiente PATH do sistema. No meu caso, adicionei "C: \ cygwin64 \ bin".
Eu espero que isso ajude.
fonte
Eu tenho o mesmo problema aqui.
Em outras postagens, sugeriu-se espelhar uma pasta vazia para segmentar a pasta através do compartilhamento de rede com o MS RoboCopy.
No momento certo, estou executando isso, com "> nul" para acelerar (na verdade):
"C: \ TEMP" é uma pasta vazia e "W: \ TMP" é a pasta afetada :
robocopy / mir c: \ temp \ 127.0.0.1 \ w $ \ tmp> nul
fonte
Eu também tive isso, em um sistema Windows 10 independente. C: \ Usuário \ Nome \ Repita \ Repita \ Repita \ Repita \ Repita \ Repita \ Repita aparentemente até o infinito.
De acordo com o OP, eu poderia navegar usando o Windows ou o Prompt de Comando até o 50º e não mais. Não pude excluí-lo ou clicar nele, etc. exatamente como descrito.
C é a minha linguagem e, por fim, escrevi um programa com um loop de chamadas do sistema, que se repetem até que falhem. De acordo com o código DOS do JohnO, criei um diretório chamado tmp e movi Repeat \ Repeat para ele, excluí a pasta Repeat agora vazia e movi tmp \ Repeat novamente para a pasta atual. Repetidamente!
O ChkSystem apenas executa uma chamada system () e verifica o valor de retorno, parando se falhar.
Importante, falhou várias vezes. Eu pensei que talvez meu programa não estivesse funcionando, ou que fosse infinitamente longo, afinal. No entanto, eu já tive isso antes com chamadas do sistema, com as coisas não sincronizando, então eu apenas executei o programa novamente e ele continuou de onde parou, portanto, não pense que seu programa não está funcionando. No total, depois de executá-lo cerca de 20 vezes, limpou todos eles. No total, havia cerca de 1280 pastas originalmente. Não faço ideia do que causou isso. Louco.
fonte
Com diretórios de loop de três níveis:
fonte
Eu o corrigi executando o chkdsk / f através do console de administração, reiniciei e usei a exclusão do explorador de arquivos. Embora o Windows tenha se queixado de alguma coisa sobre o arquivo / pasta longo, ele se livrou da pasta recursiva problemática quando confirmei a exclusão.
Não tenho certeza se existem outros problemas que eu possa ter criado usando a opção chkdsk antiga no meu sistema de arquivos do Windows 7 Pro.
fonte
Para mim, essa variação do método Windows RoboCopy funcionou:
Sim, leva tempo, mas fez o trabalho.
fonte
Basta executar o MS ROBOCOPY da seguinte maneira:
. . . . . . . . . . . . . . .
ROBOCOPIA "C: \ anyplace \ BADFOLDER" "C: \ where \ BADFOLDER" / MIR
Onde:
C: \ anyplace \ BADFOLDER .. é a "pasta vazia" que você criou e
C: \ where \ BADFOLDER .. é a pasta onde está a "árvore de diretórios infinitamente recorrentes".
. . . . . . . . . . . . . . .
Após a execução do ROBOCOPY. Agora você tem dois PADRÕES "vazios".
Para limpar, exclua os dois
C: \ anyplace \ BADFOLDER e C: \ where \ BADFOLDER
fonte