O Eclipse criou uma pasta temporária em um dos diretórios aninhados bastante profundo, por exemplo,
dir1\dir1\dir1\dir1\...
Não consigo excluir esta pasta no Windows via Explorer, del
nem os rmdir
comandos ou nem o comando Cygwin 'rm'. Como devo remover esta pasta muito longa?
Ele continua dizendo "O nome do arquivo é muito longo ..."
Respostas:
Se você é como eu e não gosta de instalar software adicional para corrigir um problema como esse, eu usaria a sugestão do XQYZ e a usaria
robocopy
para resolvê-lo. (No meu caso, o problema foi criado pela robocópia em primeiro lugar, copiando um diretório que continha pontos de junção recursivos sem fornecer / XJ à robocópia).Para excluir a árvore de diretórios começando em c: \ subdir \ more \ offending_dir :
O processo passo a passo total é tão simples quanto isto:
cd c:\subdir\more
para cd em seu diretório pai.mkdir empty
para criar um diretório vazio.robocopy empty offending_dir /mir
para espelhar o diretório vazio no diretório ofensivo.rmdir offending_dir
para se livrar do diretório ofensivo agora vazio ermdir empty
livrar-se do seu diretório vazio intermediário.fonte
robocopy
pontos de junção; obrigado por me mostrar como usá-lo para limpar a bagunça!Na verdade, isso é bastante simples de corrigir. Diga que a estrutura de diretórios é a seguinte:
Para corrigi-lo, basta renomear cada pasta para um nome de pasta com um caractere até que não seja mais longo para excluir:
C:\Dir1
paraC:\D
C:\D\
C:\D\Dir1
paraC:\D\D
C:\D\D\
Aqui está um arquivo em lotes para automatizar o processo (esta versão simples é melhor para diretórios simples como o descrito na pergunta, especialmente para os descartáveis). Passe a pasta mais alta possível (por exemplo,
C:\Dir1
paraC:\Dir1\Dir1\Dir1…
ouC:\Users\Bob\Desktop\New Folder
paraC:\Users\Bob\Desktop\New Folder\abcdefghi…
)Explicação técnica
As outras soluções propostas são inversas; você não pode consertá-lo trabalhando a partir do diretório mais interno para fora; precisa seguir na outra direção.
Ao tentar acessar um diretório, você o faz usando seu caminho absoluto, explicitamente ou não, o que inclui tudo o que veio antes dele. Portanto, para uma estrutura de diretório como
C:\Dir1\Dir1\Dir1\Dir1
, o comprimento do caminho para o mais internoDir1
é 22. No entanto, o comprimento do caminho para o mais externoDir1
é apenas 7 e, portanto, ainda é acessível, independentemente do seu conteúdo (no contexto do caminho de um determinado diretório) , o sistema de arquivos não tem conhecimento do que contém ou do efeito que tem sobre o comprimento total do caminho de seus diretórios filhos; apenas seus diretórios ancestrais - você não pode renomear um diretório se o comprimento total do caminho for muito longo).Portanto, quando você encontra um caminho muito longo, o que você precisa fazer é ir para o nível mais alto possível e renomeá-lo para um nome de um caractere e repetir para cada nível nele. Cada vez que você faz isso, o comprimento total do caminho diminui pela diferença entre o nome antigo e o novo nome.
O contrário também é verdadeiro. Você não pode criar um caminho maior que o comprimento máximo suportado (no DOS e Windows
MAX_PATH = 260
). No entanto, você pode renomear diretórios, trabalhando desde o interior até o exterior, para um nome mais longo. O resultado é que pastas mais profundas, cujo caminho absoluto é> 260, estarão inacessíveis. (Isso não os torna "ocultos" ou seguros, uma vez que são simples o suficiente para serem acessados, portanto, não use esse método para ocultar arquivos.)Nota lateral interessante
Se você criar pastas no Windows 7 Explorer, pode parecer que o Explorer permita criar subdiretórios de forma que o comprimento total seja maior que
MAX_PATH
, e na verdade é, no entanto, ele está trapaceando usando “nomes de arquivos do DOS 8.3”. Você pode ver isso criando uma árvore como a seguinte:Tem 696 caracteres, o que obviamente é muito maior que 260. Além disso, se você navegar para o subdiretório mais interno do Explorer, ele será exibido conforme o esperado na barra de endereços quando não estiver em foco, mas quando você clicar no endereço barra, altera o caminho para
C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, que tem apenas 102 caracteres.No XP, ele não faz isso, mas se recusa firmemente a criar um caminho mais longo do que o suportado.
O que seria realmente interessante é descobrir como o Windows 7 Explorer lida com “caminhos muito longos” quando a
NtfsDisable8dot3NameCreation
opção está definida.fonte
\\?` doesn't work with
rmdir`.\\?\C:\dir\dir\dir\dir
literalmente ignoram MAX_PATH; não há "variáveis" envolvidas. (Mas como eu disse, ele não funciona comrmdir
ou outroscmd.exe
builtins por algum motivo.)md C:\01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
Não funcionará porque o sistema de arquivos possui informações suficientes para determinar que o comprimento total do caminho seria de 263 caracteres, portanto falhará.Você pode encurtar o caminho usando
subst
para criar uma unidade virtual:Mude para a unidade virtual:
Agora você pode excluir os arquivos:
Remova a unidade virtual:
Remova o diretório:
fonte
C:\TEMP\dir1\dir1\dir1
, ele diminuirá parte dela, permitindo que você entre. É exatamente como a sua sugestão de renomear, mas com o mapeamento. ;):-)
Escrevi um pequeno aplicativo C # para me ajudar a excluir uma estrutura muito profunda semelhante gerada por um uso descuidado do Robocopy e um backup do Homeserver; Por padrão, o Robocopy trata os pontos de articulação como pastas comuns ... :-( Você pode acabar com uma grande bagunça sem perceber.
A ferramenta está disponível no CodePlex com arquivos de origem, para qualquer um usar.
fonte
Há algum tempo atrás, criei um pequeno executável utilitário chamado DeleteFiles que você pode usar para executar essa tarefa facilmente.
Usando este utilitário independente, você pode simplesmente fazer:
para excluir toda a estrutura de pastas. -r recursa a hierarquia de pastas do diretório inicial para baixo, -f exclui todas as pastas que estão vazias (que serão todas elas se você usar . como a especificação do arquivo). O DeleteFiles suporta caminhos maiores que o limite do Windows MAX_PATH, para que funcione bem em pastas profundamente aninhadas.
DeleteFiles é gratuito e de código aberto, e você pode pegar o código binário ou fonte do GitHub ou instalar diretamente usando o Chocolatey
fonte
> NUL
ao final pode tornar o processo mais rápido.Simples e fácil agora
Eu estava enfrentando esse mesmo problema há tanto tempo com node_modules que pastas muito aninhadas. finalmente, criou um script para corrigir o que pode excluir pastas, encurtando os caminhos.
https://github.com/dev-mraj/fdel
fonte
Enquanto trabalhava com o Sikuli, levantei-o com um loop de recursão Calculator.sikuli no programa que gerou uma quantidade incontável de dirs "calculator.sikuli.calculator.sikuli". Eu poderia mover a árvore, mas o nome do caminho era muito longo para excluir.
Depois de tentar várias soluções com o popd loop, Scandisk e chegando (perceptivelmente) a lugar nenhum ....
Eu escrevi esse script para 'aprofundar' nos diretórios recorrentes (em um dir chamado 'a'), movê-los (para um dir chamado 'b'), excluir a árvore truncada e movê-los de volta (para 'a') , e repita:
Remdirs.bat
Esta é apenas uma chamada para executar o arquivo em lotes novamente.
fonte
Tivemos um problema como esse no trabalho quando o eclipse decidiu criar lixo nos discos rígidos. Nós o corrigimos usando a função / MIR do robocopy para espelhar um diretório vazio no aninhado.
fonte
Eu tentaria abrir um prompt de comando e executar:
Se isso não funcionar, eu cdaria parte da árvore de diretórios e tentaria excluir um subconjunto dos diretórios - digamos, os 20 diretórios mais internos - e, então, sairia dali.
fonte
;-)
Se for uma pasta de rede, compartilhe o diretório pai desse diretório e mapeie-o para uma unidade em sua máquina local e exclua sua pasta.
fonte
Abra um prompt de comando.
Navegue até a pasta / diretório que contém o 'dir1' mais alto (vamos assumir C: \)
Editar (após os comentários adicionados) :
Outras idéias:
A MS oferece informações sobre como lidar com o problema (muitas idéias para tentar) aqui .
Há também essa ferramenta (nunca a usei pessoalmente) - TooLongPath .
Talvez escreva algo (já que você possui o Eclipse) que navega até o final e depois retira um nível de pasta por vez, excluindo à medida que avança?
fonte
Outra solução: baixe o Total Commander. É um programa muito útil, não apenas porque é ciente do nome de arquivo longo.
A versão não registrada é nagware, mas totalmente funcional; ele fará o trabalho.
fonte
Isso pode ser feito diretamente na linha de comando ou em um arquivo em lotes, construindo um caminho UNC para o diretório que você deseja excluir
então ao invés de
usar
Caminhos no estilo UNC como esse podem ser muito mais longos e ultrapassar o limite de 260 caracteres.
fonte
The path \\?\C:\temp\wqiyretiuqyertiuyqwteiyrutqwuiyertiqrqweirqyert\wqteriuwqyetriuqwteiryutwiuertiuyqerieerrt\IOQWUE~1\QIWUYE~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\ OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1 is too long.
Windows 7 de 64 bits.Quando tenho esse problema, simplesmente renomeio alguns nomes de pastas muito mais curtos; depois que o caminho total for curto o suficiente, ele excluirá OK. Não são necessárias ferramentas extras.
fonte
ren
comando falharápath too long
.Eu tive o mesmo problema, exceto que ele foi criado por uma tarefa recursiva do Cobian Backup. Acontece que o software Cobian gratuito inclui um aplicativo Deleter que pode remover facilmente essas pastas aninhadas traquinas super rapidamente.
Está localizado no menu Ferramentas.
fonte
Corri para o mesmo problema com uma confusão de pastas com mais de 5000 diretórios que algum aplicativo Java fazia e escrevi um programa que o ajudará a remover esta pasta. Todo o código fonte está neste link:
https://gitlab.imanolbarba.net/imanol/DiREKT
Ele removeu tudo depois de um tempo, mas conseguiu fazer o trabalho, espero que ajude as pessoas que (como eu) enfrentam o mesmo problema frustrante
fonte
Seu sistema de arquivos pode estar corrompido. Execute o chkdsk para verificar se ele repara alguma coisa e tente excluir a pasta.
fonte
MAX_PATH=255
). Isso pode acontecer mesmo com um sistema de arquivos não corrompido.