Questão Como excluir diretórios com caminho / nomes muito longos para exclusão normal


O Windows parece ter um limite de comprimento em nomes de arquivos ao tentar excluir, embora não impeça a criação desses arquivos.

Nosso processo de criação cria vários arquivos temporários (muitos de um WSDL) que entram em conflito com esse limite. Nosso script ant é de alguma forma capaz de excluí-los ao fazer uma limpeza, mas às vezes eu preciso excluir o diretório workarea (onde todos os arquivos temporários vão) sem realmente fazer uma limpeza completa do formiga.

Este é o mesmo erro essa questão, mas as respostas lá não funcionam realmente para mim, pois estou lidando com um diretório, não com um arquivo, e nem sempre sei quais arquivos ou subdiretórios específicos estão causando o problema. E estou tentando evitar qualquer processo manual (além de acionar um único comando) para realmente excluí-los.

Se eu tentar excluir o diretório do Explorer, recebo o erro

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Tentando Remove-Item no powershell dá o seguinte erro:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

Alguém sabe de alguma ferramenta ou maneiras fáceis de contornar este erro de exclusão sem ter que encontrar manualmente os arquivos com problema e mova / renomeie-os?


349


origem


Eu encontrei a solução antes de postar esta pergunta, mas como os outros podem se deparar com isso, decidi publicá-la para que pudessem encontrar a solução que encontrei. - Herms
Ah, eu sei, mas geralmente quando eu faço coisas assim deixo a questão "sem resposta" por um tempo para ver se alguém tem uma solução melhor. - Herms
De Longe a solução mais simples: youtube.com/watch?v=qQTyTprFAOg - TaW
usando Ubuntu ou qualquer outro Linux Bootable CD podemos inicializar o nosso computador para Ubuntu ou qualquer outro sistema operacional para temporário. Então, podemos selecionar a pasta e podemos excluí-la facilmente. - kelum priyadarshane
Esta pergunta mais antiga também tem algumas respostas interessantes: superuser.com/questions/45697/… - AdamV


Respostas:


Use o 7-Zip Gerenciador de arquivos para excluí-los. Usar MudançaDEL insinde o Gerenciador de Arquivos 7zip (caso contrário, o Windows tenta mover para a Lixeira, que irá falhar novamente).


392



Obrigado - isso se livrou de uma árvore dir que foi um pouco recursiva e era muito profunda para o del / rmdir / rm / explorer remover - Martin Beckett
funcionou muito bem usando shift + Del - 7zip não pôde enviar arquivos de caminho longo para a lixeira .... - cori
+1 7zip. Você tem que navegar para a pasta e, em seguida, use shift + Del como @cori disse. Se você selecionar o Delete opção do menu de contexto, WILl falha lá. shift + Del isto! - Urda
7zip não funcionou para o win7 64, então o linux fez. - Erik Friesen
Eu evito isso porque com o 7zip você pode deletar também deletar uma pasta que contém longas pastas aninhadas dentro. Tive o meu problema com uma pasta node_module que continha toneladas de pasta aninhada e não consegui removê-la. 7zip corrigido da pasta base na perfeição. +1 - Gruber


Nenhuma das outras respostas (gratuitas) aqui funcionou para mim, mas eu encontrei uma em outro site:

rimraf <dir>

rimraf é um Node.js pacote, então você precisará instalar o Node.js que inclui npm. Então você pode correr:

npm install -g rimraf

Então você pode correr rimraf da linha de comando.

Eu encontrei esta solução porque npm propriamente dito estava causando esse problema devido à forma como ele ninhos dependências.

A propósito, rimraf Obtém seu nome do comando UNIX rm -rf, que recursivamente exclui arquivos e pastas.


307



Tentei muitas maneiras. Isso simplesmente funciona perfeitamente! - Duckegg
A melhor resposta de todas :) sim é fácil beasy - Al-Mothafar
Essa deve ser a resposta aceita. - NINCOMPOOP
Sua solução funciona, mas isso é tão f ## k-up que eu tenho que usar um módulo de nó js para excluir pastas de módulos do nó js ... Eu não quero mais viver neste planeta - Benoit P
O nó criou o problema em primeiro lugar para mim, então ... interessante ... que eles também tenham uma solução. - Eric J.


Há sim não há necessidade de instalar nenhum programa para resolver este problema.

Esse problema é facilmente resolvido usando robocopypré-instalado desde o Windows Vista, lançado em 2006.

Por exemplo, rmdir /S /Q <dir> foi reportado como falho em alguns casos. Não há necessidade de usar o 7zip ou qualquer outra ferramenta de terceiros. Powershell é um exagero. O Cygwin pode funcionar, mas você pode não tê-lo instalado. Então, vamos nos concentrar robocopy

A ideia é

  1. usar robocopy para copiar + atualizado
  2. de um nova pasta vazia 
  3. para a pasta que você deseja excluir, o destino.

Depois de exect robocopy, o diretório de destino também estaria vazio.

Estas instruções são para a linha de comando. Basta abrir a pesquisa no Windows, digite cmd e pressione Enter.

Digamos que a pasta que queremos excluir, o destino, seja

C:\delete\this folder\with a very long name 

  1. Primeiro crie um diretório vazio, f.i. C:\emptyfolder.

    mkdir C: \ emptyfolder

  2. Copie + atualize do diretório vazio para o destino, usando a opção "/ purge"

    robocopy c: \ emptyfolder "C: \ delete \ esta pasta \ com um nome muito longo" / purga

  3. Exclua o diretório vazio. Você não precisa mais.

    rmdir c: \ emptyfolder

Como não há arquivos ou pastas no diretório de origem (C:\emptyfolder), ele simplesmente exclui os arquivos e pastas no diretório de destino (C:\delete\this folder\with a very long name) recursivamente!

  • Truque final: você pode evitar escrever à mão

    C: \ delete \ esta pasta \ com um nome muito longo

    Arrastando a pasta de uma janela do Explorer e soltando na janela Terminal / cmd.

Seja cuidadoso: Os arquivos excluídos não vai para o lixo pasta! Uma vez apagados, os arquivos não podem ser recuperados.

(Tirado de "Caminho muito longo? Use Robocopy" por BVLANGEN)

PS: Eu percebo que essa resposta estava aqui, menos didaticamente. Como excluir um arquivo no Windows com um nome de arquivo muito longo? [duplicado]

Benoit adicionado:

Você pode precisar passar por esse processo mais de uma vez para se livrar de todos os arquivos.


117



Obrigado bom senhor !! Esta deve ser a resposta aceita, pois todas as outras não funcionou ou exigiu um Ferramenta de terceiros. :) - MickyD
Isso funciona perfeitamente ... não há necessidade de instalar nada (até onde eu sei) e é rápido. Esta deve ser a resposta aceita! - ksumarine
Isso mantém alguns (ou todos) da árvore de diretórios em "c: \ deletefolder" (dir de destino). Enfim, apagou tudo em um piscar de olhos para mim (acho que os arquivos eram pequenos) e eu só tinha que manualmente <Del> "c: \ deletefolder", os diretórios filhos foram removidos sem um problema. Trabalhou como um encanto. +1, deve ser a resposta aceita! :) - rld.
@rld, mas "deletefolder" existia antes? Caso contrário, acho que deveria estar vazio se fosse um novo diretório. Caso contrário, é uma bagunça. Eu poderia adicionar um último passo para "rmdir deletefolder". - hectorpal
@hectorpal 1. Eu tinha uma árvore com restos de um backup da unidade C do Windows de outra máquina, que consegui excluir, exceto pelas partes muito longas, ie. "% USERPROFILE% / foo / muito_long_dirname / vldn2 / vldn3 /(...)/ very_long_filename". 2 cd ~; mkdir empty; robocopy empty foo /purge 3. Fiquei com ~ / foo / maybe_something_deeper_too_cant_remember / e realmente não tive tempo para investigar mais, porque eu já estava chateado com M $ por me desrespeitar e desperdiçar meu tempo, mas um simples <Delete> on ~ / foo no explorador removido com sucesso, depois de falhar infinitamente (mesmo com propriedade) até o robocopy. - rld.


Eu acredito que encontrei uma maneira de excluir coisas de cmd. Originalmente eu tentei o del comando, mas isso não funcionou. Então me lembrei rmdir. Fazendo o seguinte:

rmdir /S /Q <dir>

parece ter funcionado.


78



Não funcionou para mim. :( - Andrew Arnott
lembre-se de cair no cmd antes de tentar executar o rmdir. - brianpeiris
Para aqueles que não conseguem usar essa solução, tenho uma solução alternativa que funcionou para mim (com nomes de caminho / arquivo muito longos): Mova o (s) arquivo (s) / diretório para C: \ para encurtar o caminho e exclua a partir dele. - Anders Sandberg Nordbø
É possível ter diretórios para os quais essa solução não funcione, que o 7-Zip possa excluir. Eu só tinha isso acontecer comigo. - SamStephens
Esta solução está obtendo resultados inconsistentes. Por favor, não vote. - hectorpal


A ferramenta que usei quando tive esse problema foi FastCopy. Eu selecionei Excluir tudo na lista suspensa, selecionei o diretório que queria excluir e cliquei Excluir tudo.

FastCopy delete dialog screenshot

O FastCopy é portátil (não requer instalação) e há versões de 32 e 64 bits disponíveis.


29



Se você está procurando uma ferramenta de linha de comando, pode usar uma pequena ferramenta que publiquei no GitHub (github.com/epsitec/Tools-RecursiveDelete). - Pierre Arnaud
Eu tinha um conjunto gerado recursivamente de arquivo / pasta aninhada. Esta foi a única solução em funcionamento - Pierluigi
Isso funcionou para mim quando, o material da linha de comando falhou, a tentativa de 7zip falhou. e até o suporte da Microsoft ficou perplexo! - Kit Ramos
Mesmo aqui - eu meio que comecei a deletar arquivos com 7zip, mas ele também agia muito estranho e eu tive que Shift + Delere cada diretório várias vezes seguidas para realmente apagá-lo, mas então eu tentei essa ferramenta, e trabalhei como um encanto . Lançou duas vezes para se livrar de todos os arquivos. Obrigado! - Artanis
Obrigado, por mim também a única solução de trabalho, ótimo !!!! - tim


Cygwin's rm -rf funciona bem em longos caminhos!


24



Cygwin trabalhou para mim perfeitamente! Apenas fiz um -rm -rf e todos os arquivos foram deletados. - Ranhiru Cooray
Trabalhei para mim também no GNU bash, versão 4.1.10 (4) -release - rjzii
Funcionou muito bem ao executar a partir de uma janela de comando do Git Bash. Eu tinha instalado o GitGui para isso. - Albo Best


Sem instalar software adicional, você pode usar subst comando para criar temporariamente um alias para um longo diretório nomeado.

por exemplo. Se você quiser excluir a pasta C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted você pode usar o comando

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

e então você pode deletar X:\folder to be deleted no Windows Explorer ou no prompt de comando facilmente. Para remover o alias da letra da unidade temporária, use o comando

subst x: /d

22



Eu tentei todas as outras respostas (incluindo respostas de outras perguntas semelhantes) e este foi o único que acabou trabalhando para mim. E foi de longe o mais rápido. - glenneroo
Esta é de longe a melhor resposta: recursos simples e integrados, sem mexer no registro. Deve ser a resposta aceita. - Kevin Roche
Facilmente o método mais limpo e simples, obrigado Kenneth. - Seth