it-swarm-pt.tech

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

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. Todas as ferramentas de linha de comando que tentamos não funcionam de maneira confiável.

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 como uma ferramenta padrão de administração do sistema Windows.

12
David Allan Finch

Você poderia usar rmdir:

rmdir /s /q FOLDERNAME

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

15
splattne

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

Dessa forma, você evita a sobrecarga da GUI (o Explorer é lixo) e da Lixeira.

6
user3913

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.

4
Peter Stuer

Que tal mover essa 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.

3
Michael

Esta é uma combinação das postagens anteriores

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

Remova o diretório
rmdir /s /q FOLDERNAME

OR

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

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

Depois de ver sua atualização, eu tenho uma
Confira este Lista de removedores de arquivos

2
Brad Bruce

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

1
Yannone

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

Eu tentaria a linha de comando excluir e excluir o maior número possível até encontrar um que esteja bloqueado. Em seguida, use Process Explorer para encontrar qual processo esse arquivo está aberto. Mate esse processo (se você puder) e exclua novamente. Enxágüe, repita :)

1
DougN

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.

1
steve

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

1
Dave Christian

Meio hacky, mas você pode criar um script que excluirá os arquivos em pedaços, eu não sei o formato, mas supondo que sejam 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 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 rm, que provavelmente continuariam excluindo arquivos mesmo depois de encontrar um erro em um arquivo.

1
Roy Rico

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

1
user13846

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.

1
chayim

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
1
NotoriousPyro

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.

0
tomfanning

Tente recortá-lo e colá-lo na lixeira, pois ele 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.

0
Erwin Blonk

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

0
Kevin Kuphal