exclua o diretório recursivo criado pelo robocopy quando "O nome do arquivo for muito longo"

9

Depois de executar o robocopy.exe para fazer backup de uma pasta C: \ Users \ sem usar a /xjopção, acabei com um diretório recursivo que era muito longo. Por exemplo, se você executar, dir /b /svocê receberá o seguinte erro:

O nome do diretório C: \ Users \ ... \ AppData \ Local \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Dados \ Dados dos aplicativos são muito longos.

Tentei excluí-lo, rmdir "Application Data" /smas recebi o erro "O nome do arquivo é muito longo"

Analisei outras soluções, mas achei que poderia usar a ferramenta que causou o problema para resolvê- lo.

Aaron
fonte

Respostas:

14

Crie um diretório vazio com e mkdir empty, em seguida, use o robocopy empty\ "Application Data\" /mir"qual removerá toda a árvore de diretórios. Em seguida, emita um rmdir emptye rmdir "Application Datapara limpar e pronto.

Aaron
fonte
3
+1 Inacreditável que requer algo tão misterioso para fazer algo tão simples como apagar uma pasta ...
nextgentech
Esta pasta recursiva infinita de buggy estava me deixando louco! Obrigado.
Zofren
4

Você poderá cdmergulhar fundo o suficiente no diretório para excluir o que está abaixo e cdvoltar ao topo novamente e excluir o que resta.

Se isso não funcionar e você ainda estiver travado, baixe a versão demo gratuita do meu shell Hamilton C (divulgação completa: sou o autor) e use o rmutilitário que o acompanha, usando o -r(recursivo) e -x(exclua qualquer coisa ) opções.

rm -rx directoryname

My rmusa internamente o novo formato de nome de arquivo Unicode longo , permitindo a manipulação de caminhos com caracteres de 32K, e isso deve ser obtido.

Se você descobrir que o problema também envolve permissões, pode ser necessário usar sudoou suelevar, por exemplo,

sudo rm -rx directoryname

Em casos realmente difíceis, você pode ser impedido por uma ACL que impede o acesso, por exemplo, a caclsrelatórios Everyone:(DENY). Nesse caso, pode ser necessário remover essa ACE (entrada de controle de acesso).

cacls directoryname /e /r everyone

Finalmente, pretendo realmente que isso seja útil. Os registros do meu servidor dizem que as pessoas estão baixando meu software para tentar isso e quero que funcione. Se você encontrar um caso em que não ocorreu, espero que você entre em contato comigo para que eu possa depurar o porquê e fazê-lo funcionar. As coisas que você não pode excluir acontecem muito e eu gostaria de ter todos os casos cobertos.

Nicole Hamilton
fonte
3

Você também pode tentar um dos seguintes;

Resolução 1: use um nome 8.3 gerado automaticamente para acessar o arquivo

Resolução 2: renomeie ou mova uma pasta profunda

Resolução 3: Mapeie uma unidade para uma pasta na estrutura do caminho Mapeie uma unidade para uma pasta dentro da estrutura do caminho do arquivo ou pasta de destino. Este método reduz o caminho virtual.

Resolução 4: use um compartilhamento de rede tão profundo quanto a pasta Se as resoluções 1, 2 e 3 não forem convenientes ou não resolverem o problema, crie um compartilhamento de rede que seja o mais profundo possível na árvore de pastas e, em seguida, renomeie as pastas acessando o compartilhamento.

Resolução 5: use uma ferramenta que possa percorrer caminhos profundos

http://support.microsoft.com/kb/320081

Shawn
fonte
esta solução parece ser um tipo de "Resolução 5: Use uma ferramenta que pode percorrer caminhos profundos"
Aaron