Mass apagando arquivos no Windows

130

Eu tenho um diretório, que contém ~ 3 milhões de arquivos em determinados subdiretórios em um servidor Windows 2008. Excluir manualmente os arquivos via SHIFT + DEL no diretório raiz leva muito tempo. Existe alguma outra maneira de fazer a exclusão de uma maneira mais rápida ?

    
por Cfinley 07.08.2009 / 09:00

14 respostas

168

Eu regularmente preciso excluir muitos arquivos e diretórios de uma unidade criptografada WinXP, normalmente em torno de 22 GB de 500.000 arquivos em 45.000 pastas.

A exclusão com o Windows Explorer é um desperdício porque desperdiça muito tempo enumerando os arquivos. Eu normalmente movo as coisas que preciso excluir para C: \ stufftodelete e tenho um arquivo em lote deletestuff.bat para rmdir /s/q C:\stufftodelete . Isso está programado para ser executado à noite, mas às vezes eu preciso executá-lo durante o dia, então quanto mais rápido, melhor.

Aqui estão os resultados de um teste rápido de uma pequena amostra de 5,85 MB de 960 arquivos em 303 pastas. Eu executei o método 1 seguido pelo método 2 e, em seguida, restaure os diretórios de teste.

O método 1 remove os arquivos e a estrutura de diretórios em uma passagem:

rmdir /s/q foldername

O método 2 tem uma primeira passagem para excluir arquivos e saídas para nul para evitar a sobrecarga de escrever para a tela para cada arquivo singe. Um segundo passe, em seguida, limpa a estrutura de diretórios restante:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Método 1: 17,5s, 14,9s, 13,9s, 14,8s, 13,8s: média 14,98 segundos
  • Método 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: média 12.82 segundos

Veja os resultados de outro teste usando 404 MB de 19.521 arquivos em 3.243 pastas:

  • Método 1: 2 minutos e 20 segundos
  • Método 2: 2 minutos e 33 segundos

Portanto, não há muito, provavelmente perto demais para julgar em um único teste.

Edit: Eu retestei com muito mais dados, este é um caso típico para mim: 28.3 GB de 1.159.211 arquivos em 146.918 pastas:

  • Método 1: 2h 15m, 2h 34m: média: 2 horas 25 minutos
  • Método 2: 49m, 57m: média: 53 minutos

Nossa, o método 2 é quase três vezes mais rápido que o método 1! Eu vou estar atualizando meu deletestuff.bat!

    
por 27.05.2011 / 13:27
16

Se você precisar excluir árvores de diretórios grandes regularmente, considere armazenar a raiz dessa árvore de diretórios em uma partição separada e, em seguida, simplesmente formate-a rapidamente sempre que precisar excluir tudo. Se você precisar automatizar isso, você pode usar este comando DOS:

echo Y | format Z: /FS:NTFS /X /Q

onde Z: é a sua partição 'volátil'. Nota: a partição não deve ter rótulo. Eu escrevi sobre esse aqui .

    
por 31.10.2011 / 07:37
9

No prompt de comando (Iniciar - > Executar - > cmd ):

del /f /s /q foldername 
    
por 07.08.2009 / 09:07
6

Além de copiar / mover arquivos muito rapidamente (usando sua própria API), o TeraCopy pode excluir arquivos e é muito rápido também. Desde que descobri o TeraCopy, não uso um computador sem ele instalado (se for copiar / mover / excluir).

O mesmo instalador instala a edição x64, mas para usá-la você precisa forçá-la manualmente.

O beta que eu recomendo sobre as versões estáveis: link

    
por 25.05.2011 / 16:00
5

Eu fiz um arquivo bat que faz o mesmo.

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

faz o trabalho em duas etapas, uma, tenta apagar os arquivos. E o segundo é tentar apropriar-se dos arquivos. y deve ser alterado de acordo com o local (stand for yes em inglês). Se falhar a tarefa (por exemplo, se falhar porque a permissão), então você deve executá-lo novamente. No entanto, a segunda rodada não tentará excluir os arquivos excluídos na primeira rodada, então pode ser bem rápido.

Como usá-lo. Salve como delfolder.bat em uma rota de caminho (por exemplo, c: \ windows) e execute-a como

 delfolder "foldername"   

onde foldername é o nome da pasta

No meu teste, a exclusão de 123'000 arquivos levou 3 minutos (sata 7200rpm). YAY!

    
por 09.02.2012 / 18:35
3

Use o comando rd / s no prompt de comando.

    
por 07.08.2009 / 09:09
3

Usar o código abaixo geralmente funciona bem para mim.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
    
por 23.12.2011 / 16:47
1

A melhor solução prática é provavelmente mover a pasta para fora do caminho em algum lugar (por exemplo, a Lixeira) e, em seguida, começar a excluí-la. Vai demorar muito, mas pelo menos vai ficar fora do caminho.

Tenho certeza de que o tempo necessário para excluir todos esses arquivos é um requisito inerente da tarefa, não uma ineficiência na implementação da exclusão.

    
por 06.10.2009 / 23:59
1

Instale o Cygwin e use rm -r . Mas é provável que seja um exagero.

    
por 07.10.2009 / 01:45
1

Você tem geração de nome de arquivo curto ativada? Se sim, você realmente precisa disso? Remover um arquivo é apenas uma operação de metadados. Então, se você tiver o dobro do número de nomes a remover, a quantidade de trabalho será significativamente maior.

    
por 31.05.2011 / 14:40
0

Já experimentou uma destas duas aplicações?

  • Exclusão segura de arquivos
  • Disk and File Copier

Certifique-se de definir o número de substituições como 0, se desejar um desempenho mais rápido. Faça isso clicando em opções e, em seguida, altere o valor na parte inferior da caixa de diálogo.

Digite o caminho para excluir no campo Origem e clique em Excluir.

Esses aplicativos não colocam os arquivos na lixeira. Use com cuidado.

    
por 03.04.2010 / 18:30
0

Isso é fornecido para complementar e aumentar as etapas executadas nas respostas mencionadas anteriormente.

Os dois métodos descritos acima parecem bastante eficazes, mas determinar o desempenho seria difícil, a menos que sejam corrigidos exatamente nas mesmas condições:

  • Dispositivo de disco rígido físico & Modelo
    • Preferencialmente, o ATTO / Crystal Disk é comparado antes de clonar os dados neles
  • Mesma partição / volume Localização & Geometria
    • A maneira de fazer isso seria desfragmentar a partição de amostra / pastas e cloná-las exatamente como são exatamente os mesmos tipos de discos rígidos (da etapa anterior)
  • Em seguida, execute as configurações via Batch File e use o Powershell Cmdlet para registrar e medir seu desempenho.

    • O ideal é adicionar alguns mecanismos para impedir qualquer viés de armazenamento em cache devido à recente atividade semelhante.
  • Seguem-se algumas pastas de exemplo (nomeadas como tamanho total) que experimentei mas que não conseguiram obter resultados / desempenho conclusivos.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Eu teria postado os arquivos de log de saída, mas acredito que a variação é enorme devido aos tamanhos & distribuição de arquivos de pastas etc.

PowerShell:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
    
por 15.06.2017 / 14:00
0

A resposta de Hugo é a mais rápida, mas não remover arquivos ocultos ou do sistema no primeiro passo, então se você quiser uma solução mais completa use o parâmetro / a:

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

Sobre o arquivo BAT por Magallanes , tenha muito cuidado com takeown e icacls, porque os hardlinks compartilham as mesmas permissões e proprietários, portanto, se houver hardlinks não saturados na pasta você deseja remover, usar takeown e icacls irá alterar permissões e proprietários de arquivos fora da pasta.

Usando a ferramenta ln.exe você pode listar todos os arquivos com hardlink dentro da pasta e saber se eles são vinculados a arquivos fora da pasta (hardlinks não saturados):

ln.exe --enum foldername > HardlinksList.txt
    
por 13.12.2017 / 20:46
-1

A exclusão da pasta é mais rápida do que a exclusão de vários arquivos.

Então, se você preferir usar o mouse ao invés do prompt de comando, você pode criar um diretório, mover arquivos para lá e deletá-lo (com Shift + Del como você disse).

    
por 07.08.2009 / 09:13