A exclusão de grande quantidade de arquivos no Windows é lenta

34

Eu tenho uma caixa do Windows XP com um disco NTFS e a exclusão de grandes quantidades de arquivos é extremamente lenta. Se eu selecionar uma pasta que contém um grande número de arquivos em uma árvore de pastas e excluir (usando shift-del para salvar a lixeira), leva um tempo que parece ser diretamente proporcional ao número de arquivos dentro da pasta antes mesmo de aparece a caixa de confirmação. Em seguida, leva mais tempo para excluir cada arquivo da pasta.

Existe uma maneira de excluir uma pasta no Windows e não levar o tempo proporcional ao número de arquivos nela?

Sindri Traustason
fonte

Respostas:

60

Existe uma maneira de excluir uma pasta no Windows e não levar o tempo proporcional ao número de arquivos nela?

Acho que não, mas alguns métodos são claramente muito mais rápidos que outros.

A pior maneira é enviar para a Lixeira: você ainda precisa excluí-los. O pior é o seguinte shift + delete com o Windows Explorer: perde muito tempo verificando o conteúdo antes de começar a excluir qualquer coisa.

O melhor a seguir é usar rmdir /s/q foldernamena linha de comando. del /f/s/q foldernametambém é bom, mas deixa para trás a estrutura de diretórios.

O melhor que encontrei é um arquivo em lotes de duas linhas com uma primeira passagem para excluir arquivos e saídas para zero, para evitar a sobrecarga de gravar na tela para cada arquivo de singe. Uma segunda passagem limpa a estrutura de diretórios restante:

del /f/s/q foldername > nul
rmdir /s/q foldername

Isso é quase três vezes mais rápido que um único rmdir, com base em testes de tempo com um disco criptografado do Windows XP, excluindo ~ 30 GB / 1.000.000 de arquivos / 15.000 pastas: rmdirleva ~ 2,5 horas, del+rmdirleva ~ 53 minutos. Mais informações aqui .

Essa é uma tarefa regular para mim; portanto, normalmente movo as coisas que preciso excluir para C: \ stufftodelete e tenho esses del+rmdircomandos em um arquivo em lotes deletestuff.bat. Isso está programado para ser executado à noite, mas às vezes eu preciso executá-lo durante o dia para que quanto mais rápido, melhor.

Hugo
fonte
Voto a favor para inclusão> nul
Nuktu
1
O Windows me faria esperar para digitalizar milhares de arquivos a partir do backup de um SDK antigo. Levaria pelo menos uma hora, isso levou 10 minutos no meu caso. Coloquei-o em um arquivo bat para uso repetido: gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos
Veja também a mesma resposta com mais informações em superuser.com/questions/19762/mass-deleting-files-in-windows
Warlike Chimpanzee
1

Existe uma maneira de excluir uma pasta no Windows e não levar o tempo proporcional ao número de arquivos nela?

Bem, sim, formate a partição. Estou um pouco surpreso que ninguém tenha sugerido isso nos 9 anos anteriores.

É bastante radical, mas se você antecipar isso com frequência para uma pasta específica, pode valer a pena criar uma partição separada para ela.


Se isso é radical demais, as outras respostas são sua única esperança. Há uma boa explicação sobre o motivo da falha no servidor . É para sistemas de arquivos linux e XFS, mas a mesma lógica se aplica aqui. Você não pode melhorar muito as funções integradas do sistema operacional.

No entanto, se você souber os caminhos para todos os arquivos que deseja excluir, poderá economizar nas chamadas que listam o conteúdo do diretório e remover diretamente, economizando algumas despesas. Ainda proporcional ao número de arquivos.

Pessoalmente, gosto de alguns dos relatórios de progresso para garantir que o programa não tenha morrido. Então, eu gosto de excluir coisas via python. Por exemplo, se todos os arquivos estiverem em um diretório sem subdiretórios:

import tqdm
import sys
import os

location = sys.argv[1]
directory = os.fsencode(location)

with os.scandir(directory) as it:
    for dir_entry in tqdm.tqdm(it):
        try:
            os.remove(dir_entry.path)
        except OSError:
            pass  # was not a file

Isso exclui cerca de 250 arquivos / s no meu SEAGATE ST3250620NS de 12 anos. Eu diria que será muito mais rápido em sua unidade.

No entanto, neste momento, é apenas micro-otimização, por isso não fará muito, a menos que você tenha milhões de arquivos em um diretório. (como eu, lol, o que eu fiz D :)

FirefoxMetzger
fonte
0

Instale gnutools for windowse execute:

find YOURFOLDER -type d -maxdepth 3 | xargs rm -Rf
sem utilidade
fonte
0

Verifique se você não está fazendo backup de arquivos na nuvem e tentando excluí-los ao mesmo tempo!

Com muitas soluções de backup em nuvem, os arquivos ficam bloqueados enquanto estão sendo copiados e é necessário aguardar o backup.

Se você está tendo esse problema com, digamos, um diretório temporário (ou algo que não precise de backup), verifique se o diretório temporário não está selecionado no seu conjunto de backup.

Simon
fonte
0

Descobri que pastas com várias camadas de diretórios tendem a diminuir a capacidade do Windows de removê-los rapidamente. Eu estava trabalhando em um projeto em que foram necessários cinco níveis para chegar à pasta node_modules, que é sempre uma besta para excluir, mesmo com

del /f/s/q foldername > nul
rmdir /s/q foldername

O que acabo fazendo nessa situação é navegar até a pasta node_modules ou qualquer diretório com os níveis mais profundos e apenas começar a selecionar e excluir cerca de uma dúzia de diretórios por vez. Se eu receber várias exclusões, isso força a Lixeira a trabalhar em processos paralelos, em vez do único thread que acredito que ele usa, que acelera drasticamente o processo.

Quando meu diretório mais profundo estiver vazio, subo alguns níveis e faço a mesma coisa. Isso reduziu as exclusões que me levaram mais de uma hora a apenas alguns minutos.

É um processo muito manual e provavelmente pode ser roteirizado com algum sucesso, mas é o que funcionou para mim

TabsNotSpaces
fonte
0

Usei a resposta original de Hugo para criar um arquivo .bat que eu uso ao excluir projetos do NPM. Eu adicionei uma variável de caminho e só tenho que copiar e colar o caminho uma vez. Clique duas vezes no arquivo .bat e ele faz todo o trabalho - não é necessário digitar tudo.

set path="FOLDER_PATH"
del /f/s/q %path% > nul
rmdir /s/q %path%

Exemplo de uso:

set path="C:\Projects\My React Project"
del /f/s/q %path% > nul
rmdir /s/q %path%
Halcyon
fonte
-2

você tentou usar o prompt de comando

rmdir /s /q foldername

todas as operações de arquivos grandes nas GUIs são lentas - principalmente porque o feedback visual (barra de progresso) precisa ser repintado várias vezes

nEJC
fonte
5
Isso não faz sentido. A operação pode ser lenta porque a GUI precisa contar todos os arquivos para estimar o tempo necessário, mas não devido à repintura.
Bender
errado ... Eu trabalho com pastas grandes constantemente (principalmente servidor win2k) e uso o TotalCommander para mover / copiar / excluir coisas. Percebi que se eu minimizar o TC ou colocar outra janela do aplicativo em cima do material do TC, isso será feito pelo menos 50% mais rápido. TC ainda é repintar coisas Visal, mas tudo é ignorado na composição ...
Nejc
6
O seu computador é tão lento que as operações da GUI afetam o desempenho de E / S do disco? Ou o TotalCommander é incrivelmente mal codificado? O disco é centenas ou milhares de vezes mais lento que a CPU, RAM e placa de vídeo. Se os gráficos estiverem diminuindo a velocidade de gravação do disco, você terá grandes problemas.
Sr. Shiny e New
1
A questão "não teve um tempo proporcional ao número de arquivos" por um motivo. Não estou procurando 50% mais rápido.
Sindri Traustason 01/12/2009
@Sindri Se você fizer isso no prompt de comando, não haverá quase nenhum atraso antes que o sistema comece a trabalhar sua mágica. Tanto quanto eu entendo, esse pré-processamento é onde está o seu problema.
NEJC 02/12/2009