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


12

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 preenche a memória e a máquina pode travar. Existe uma maneira simples de despejar o diretório e o conteúdo? 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 importará, pois eles serão removidos mais devagar quando terminar com isso. Mas de vez em quando morre deixando a bagunça dos arquivos. Tentamos usar os métodos rmdir e del etc e eles são mais rápidos que o explorer, mas geralmente acabamos com os mesmos problemas. A partição é danificada, há um arquivo bloqueado inexplicável, algum arquivo tem um problema de permissão, o que impede a exclusão de funcionar. Normalmente, esse problema pode ser corrigido com uma reinicialização, mas, neste caso, como este é um sistema crítico que não podemos em tempo de produção. No Unix, você pode simplesmente fazer um rm -rf etc, e isso é rápido e geralmente não há nenhum problema real com ele.

BTW - o aplicativo está sendo alterado, mas isso não entrará em produção por algum tempo e eu achei que esse problema provavelmente era interessante para outras pessoas.

Atualização - porque temos o MKS Nutcracker no sistema (sem os utilitários de linha de comando), solicitamos ao programador que reunisse uma simples rm. Isso é várias ordens mais rápido que o del / deltree, etc. Acho estranho que não exista um aplicativo tão simples assim como uma ferramenta padrão de administração do sistema Windows.


Respostas:


15

Você poderia usar rmdir:

rmdir /s /q FOLDERNAME

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


Tentamos isso - acrescentarei mais à pergunta.
David Allan Finch

isso deveria ter funcionado para você. Funcionou ?
S_ruchit 27/05/2009

sim principalmente - eu adicionei os problemas que vimos acima na pergunta. Obrigado por seu comentário.
David Allan Finch

Eu vou aceitar esta resposta. Mas existe uma solução melhor que é usar um estilo unix rm mais simples, mas como isso não é possível para a maioria dos usuários, essa é a melhor opção para 99% dos usuários. Deve haver um estilo unix rm implementado para o Windows que não faz nada além de excluir recursivamente. BTW nossos programadores MKS remove_tree (veja acima) debocharam o rmdir para que o problema não seja o Windows, mas os aplicativos internos.
David Allan Finch

6

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

Dessa forma, você evita a sobrecarga da GUI (explorer é lixo) e da lixeira.


Tentamos isso - acrescentarei mais à pergunta.
David Allan Finch

4

A menos que você precise disso para aplicativos herdados de 16 bits, tente aumentar o desempenho desativando a geração curta de nomes de arquivos. 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

Então use:

Caminho RMDIR / S / Q [drive:]

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


Isso é interessante de saber.
David Allan Finch


3

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


1
Tentamos isso e, às vezes, não permitiria isso. O cliente agora executa o programa em um diretório diferente todas as vezes.
David Allan Finch

Crie um hardlink entre o caminho e a unidade, ou seja: o link físico "c: \ meu aplicativo bobo \ onde os arquivos armazenados" apontam a unidade X: em um lote de inicialização
Nime Cloud

2

Esta é uma combinação das postagens anteriores

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

Remova o diretório
rmdir /s /q FOLDERNAME

OU

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

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

Depois de ver sua atualização, eu tenho um dos meus próprios
Confira esta lista de removedores de arquivos


Eu tinha notado isso com apenas vários centenas de arquivos no passado. É uma pena que o Explorer possa ser feito para fazê-lo tão rápido quanto os aplicativos de linha de comando - eles poderiam conseguir que o cliente fizesse eles mesmos. Obrigado pela sua resposta.
David Allan Finch

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 ocorrer 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. Eu apenas crio um subdiretório _todel e os movo para lá. Geralmente funciona melhor se eu mover o diretório inteiro um nível acima, em vez dos arquivos em si.

Fora isso, a única maneira de acelerar as exclusões é desfragmentar o disco rígido. Uma solução temporária pode ser mover esse diretório para um compartilhamento samba ou usar uma junção NTFS para 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 simplesmente ejetar o disco rígido e fazer uma formatação rápida em outro PC.


É o que eu penso - ou seja, os arquivos danificados, mas por que eles não são fechados pelo NT Kernel? A velocidade é um problema com o programa, portanto, o uso do Samba ou de um disco rígido USB não é necessário para iniciantes. Mas o cliente foi sugerido para criar uma partição separada para cada execução e reformatar. Não tenho certeza se eles tentaram ainda. - Graças
David Allan Finch

1

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

Eu tentaria a linha de comando excluir e excluir o máximo que 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 você puder) e exclua novamente. Enxágüe, repita :)


Gostaria de tentar isso, mas não temos acesso direto à máquina e o aplicativo morreu. Obrigado mesmo assim.
David Allan Finch

1

Reinicialize usando um CD Linux 'Live', o rm -rf


Não podemos simplesmente reiniciar este servidor, pois é fundamental para o cliente - mas obrigado pela resposta.
David Allan Finch

1

Meio hacky, mas você pode criar um script que excluirá os arquivos em pedaços, eu não sei o formato, mas assumindo que são arquivos que começam com as letras az, você pode fazer

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

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

Nota: você também pode tentar instalar o cygwin para obter comandos como o rm, que provavelmente continuaria excluindo arquivos, mesmo após encontrar um erro em um arquivo.


Isso foi tentado, mas realmente não resolveu o problema - de qualquer maneira, obrigado.
David Allan Finch

Também temos o MKS Nutcracker instalado, mas por motivos de segurança os utilitários de linha de comando foram removidos - não a opção. Mas o que fizemos foi escrito por nossa própria empresa e isso funciona.
David Allan Finch

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, inicializar o shell do cygwin e executar o comando RM conforme mencionado acima. Essa é uma maneira prática de manter a flexibilidade do unix à mão.


Esta é uma solução razoável quando você gerencia o sistema.
David Allan Finch

1

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


Desculpe, não podemos apenas reiniciar o servidor, mas obrigado pela resposta.
David Allan Finch

1

Monte a pasta em uma máquina Linux e faça a exclusão recursiva a partir daí.

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

# rm /mnt/tobedeleted/* -R

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


você já tentou isso?
David Allan Finch

1

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

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

ROBOCOPY C:\ThisIsAnEmptyFolder C:\Users\SomeUser\Desktop\SomeFolderWithTempFiles /MIR

0

Se nenhuma das outras sugestões estiver funcionando, você já pensou em acelerar sua E / S?

Compre controladores melhores, discos mais rápidos.

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

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


Adoro, mas acho que o cliente não pagará, pois espera uma nova versão do programa - obrigado pela resposta.
David Allan Finch

Atualmente, a RAM do servidor no Reino Unido é de cerca de GBP 10 por gigabyte.
Tomfanning 27/05/09

Verdadeiro, mas o cliente paga X pela máquina (de uma cotação) e não vê razão para gastar mais Y.
David Allan Finch

Como o servidor especificado não faz o trabalho suficientemente bem?
tomfanning

É bom o suficiente para o trabalho. O problema é que o programa tem um bug que está sendo corrigido. Eles não vão gastar mais dinheiro.
David Allan Finch

0

Tente recortar e colar na lixeira, pois ela deve ignorar a tentativa de mover todos os arquivos. Não sei ao certo o que será feito para esvaziar a lixeira, porque provavelmente ela examinará todos os arquivos.


Acho que o cliente tentou isso e não foi muito melhor do que usar o Explorer normalmente. Obrigado
David Allan Finch

0

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


Quando tentei pela última vez, era o mesmo.
David Allan Finch

Na verdade, eu apenas tentei novamente - com uma instalação antiga e ainda estou esperando. Provavelmente desistirei e usei o MKS rm.
David Allan Finch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.