Qual é a melhor maneira de remover 100.000 arquivos de um diretório do Windows

10

Eu tinha um usuário com mais de 100.000 arquivos em um único diretório. A máquina trava e fica inutilizável por um longo tempo, enquanto o Explorer enche a memória e a máquina pode falhar. Existe uma maneira simples de descarregar o diretório e o conteúdo? Nós tentamos usar a linha de comando deltree e isso não parecia muito melhor.

DaveF

Extra -

Tivemos esse problema várias vezes com o mesmo usuário (na verdade, cliente). Um programa cria centenas de milhares de arquivos temporários durante sua execução. Se o programa funcionar corretamente, não importa, pois eles são removidos quando ele é concluído. Mas de vez em quando morre deixando a bagunça dos arquivos. Nós tentamos usar os métodos rmdir e del etc e eles são mais rápidos do que usar o explorer, mas geralmente acabamos com os mesmos problemas. A partição fica danificada, há um arquivo bloqueado inexplicado, algum arquivo tem um problema de permissão, o que impede que a exclusão funcione. Normalmente, este problema pode ser corrigido com uma reinicialização, mas neste caso, como este é um sistema crítico, não podemos em tempo de produção. No Unix você pode apenas fazer um rm-rf etc e isso é rápido e geralmente não há problema real com isso. Todas as ferramentas de linha de comando que testamos não são adequadas para trabalhar de maneira confiável.

BTW - o aplicativo está sendo alterado, mas isso não entrará em produção por algum tempo e eu pensei que esse problema provavelmente fosse interessante para os outros.

Atualização - porque temos o MKS Nutcracker no sistema (sem os utilitários de linha de comando), conseguimos que o programador lançasse um simples comando. Isso é várias ordens mais rápido do que del / deltree etc. Eu acho estranho que não haja um aplicativo tão simples prontamente disponível como uma ferramenta padrão de administração de sistema do Windows.

    
por David Allan Finch 27.05.2009 / 11:53

16 respostas

13

Você pode usar rmdir :

rmdir /s /q FOLDERNAME

Sinalizadores: /s significa excluir recursivamente, /q é o modo "silencioso".

    
por 27.05.2009 / 11:57
6

Eu costumava ter esse problema com os servidores que eu estava administrando. Pule o explorer completamente e use o prompt de comando. Navegue até a pasta e "del . "

Dessa forma, você evita a sobrecarga da interface gráfica do usuário (o explorer é a lixeira) e a lixeira de reciclagem.

    
por 27.05.2009 / 11:57
4

A menos que você precise disso para aplicativos legados de 16 bits, tente aumentar o desempenho desabilitando a geração de nome de arquivo curto. Isso pode ter um impacto significativo nas operações de diretório com grande número de arquivos.

Regedt32 select:
"HKLM\system\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameC
reation"=1

Em seguida, use:

Caminho RMDIR / S / Q [unidade:]

para remover o diretório com todos os seus arquivos.

    
por 01.06.2009 / 12:19
3

Que tal mover essa pasta temporária para uma unidade / partição diferente? Em vez de excluir todo o lixo, você poderia formatar a unidade (interface gráfica ou linha de comando). Com formato rápido, isso deve ser razoavelmente rápido.

    
por 27.05.2009 / 14:02
2

Esta é uma combinação dos posts anteriores

abra uma janela de comando:
File -> Run -> cmd

Remover o diretório de rmdir /s /q FOLDERNAME

OR

Remover um padrão de arquivos em cd \....\directory
del *.[something]

Como você observou em sua pergunta, o Windows Explorer pode realmente desacelerar as coisas.

Depois de ver sua atualização, tenho uma das minhas próprias Confira esta lista de removedores de arquivos

    
por 27.05.2009 / 12:21
1

Não tenho nada melhor que del e rm, mas mesmo que demorem muito tempo, isso não deve resultar em danos à partição. Os arquivos bloqueados podem ser porque o programa que os criou morreu inesperadamente.

Às vezes, mesmo que os arquivos não possam ser excluídos, eles podem ser movidos para outro subdiretório temporário. Acabei de criar um subdiretório _todel e movê-los para lá. Geralmente funciona melhor se eu mover o diretório inteiro um nível acima, em vez dos arquivos em si.

Além disso, a única maneira de tornar as exclusões mais rápidas é desfragmentar o disco rígido. Uma solução temporária pode ser mover esse diretório para um compartilhamento de samba ou usar uma junção NTFS em um disco rígido USB portátil. (Uma pequena partição seria melhor e mais rápida do que usar todo o disco rígido). Você pode então ejetar o disco rígido e fazer um formato rápido em outro PC.

    
por 27.05.2009 / 14:14
1

Uma partição danificada da exclusão de arquivos? Esse é um grande problema com o disco, independentemente do número de arquivos que estão sendo excluídos.

Eu tentaria excluir a linha de comando e excluir quantos você puder até encontrar um que esteja bloqueado. Em seguida, use o Process Explorer para descobrir qual processo tem esse arquivo aberto. Mate esse processo (se puder) e, em seguida, faça a exclusão novamente. Enxaguar, repita:)

    
por 27.05.2009 / 18:36
1

Reinicie usando um CD do Linux 'Live', o rm -rf

    
por 27.05.2009 / 20:00
1

Meio hacky, mas você pode criar um script que irá deletar os arquivos, eu não sei o formato, mas assumindo que são os arquivos que começam com as letras a-z, você pode fazer

deltree /y a*
deltree /y b*
...
deltree /y z*

altere o deltree com o método de remoção escolhido. provavelmente ser mais lento, mas menos propenso a erros?

sidenote: você também pode tentar instalar o cygwin para obter comandos como o rm, o que provavelmente continuaria a deletar arquivos, mesmo depois de encontrar um erro com um arquivo.

    
por 27.05.2009 / 20:11
1

Os vários métodos acima de tudo funcionam. Se você tiver o cygwin carregado em um pen drive, basta conectá-lo ao seu USB local, acionar o seu cygwin shell e executar o comando RM conforme mencionado acima. Esta é uma maneira prática de manter a flexibilidade do Unix à mão.

    
por 22.07.2009 / 15:24
1

Você também pode inicializar no console de recuperação ou algo assim. Isso deve ignorar completamente quaisquer problemas estranhos com o SO.

    
por 27.05.2009 / 18:26
1

Monte a pasta de uma máquina linux e faça a exclusão recursiva de lá.

# mount -t cifs //server/share /mnt/tobedeleted -o username=yourshareusername

# rm /mnt/tobedeleted/* -R

Você pode até usar um cron job para excluir os arquivos em intervalos regulares.

    
por 20.12.2012 / 12:40
1

Por que não usar apenas o robocopy e espelhar um diretório vazio?

Basta criar uma pasta vazia e, em seguida, usar:

ROBOCOPY C:\ThisIsAnEmptyFolder C:\Users\SomeUser\Desktop\SomeFolderWithTempFiles /MIR
    
por 02.08.2017 / 21:20
0

Se nenhuma das outras sugestões estiver funcionando, você considerou acelerar sua E / S?

Compre controladores melhores, discos mais rápidos.

Ou será que, se os arquivos forem temporários (como você sugere) e os tamanhos permitirem, você poderá adicionar RAM extra à caixa (barata) e configurar um disco RAM?

No melhor dos casos, o desempenho não seria prejudicado ao excluir grandes volumes de arquivos. Na pior das hipóteses, uma reinicialização limparia a partição.

    
por 27.05.2009 / 12:31
0

Tente recortá-lo e colá-lo na lixeira; ele deve ignorar a tentativa de mover cada arquivo. Não tenho certeza do que será feito para esvaziar a lixeira, porque, provavelmente, ela passará por todos os arquivos.

    
por 27.05.2009 / 13:32
0

A exclusão com SHIFT + DEL faz alguma diferença em relação à velocidade?

    
por 22.07.2009 / 15:31