Questão Excluindo arquivos em massa no Windows


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 em um Mais rápido maneira?


128


origem


Também perguntamos aqui no Stack Overflow: stackoverflow.com/questions/186737/… - Hugo
Como eu poderia direcionar o ímã para apenas alguns subdiretórios? - Jaime Hablutzel
@Jaime Com uma mão firme, como um verdadeiro programador ... ;-) xkcd.com/378 - Legionair
E se for um drive SSD? - Benjamin Weiss


Respostas:


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.

Excluir com o Windows Explorer é lixo porque desperdiça muito tempo enumerando os arquivos. Eu costumo mover as coisas que eu preciso excluir para C: \ stufftodelete e ter um arquivo de 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ório em uma passagem:

rmdir /s/q foldername

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ório 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

Aqui está o resultado 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 33 segundos

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


Editar: 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

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


166



RD / S / Q funciona muito bem se você especificar um caminho absoluto, mas não ao trabalhar com caminhos relativos. Há uma solução? - Michael S.
@ Hugo: Hugo, uma pergunta: Nos testes cronometrados acima, para um ou ambos os métodos, você contou os arquivos imediatamente antes de executar o método? Estou perguntando porque o conteúdo da pasta pode já estar no cache de arquivos do sistema operacional. Obrigado! - William C
@WilliamC: Não me lembro exatamente, mas para as exclusões repetidas com o mesmo conteúdo, contarei imediatamente antes de apenas uma exclusão e não a repetirei para as outras exclusões (como eu já sabia os números). - Hugo
O seu timing inclui mover os 1.159.211 arquivos em 146.918 pastas para o C:\stufftodelete pasta? - martineau
@martineau: Não, os tempos de teste foram (se bem me lembro) excluindo as pastas no lugar. Geralmente é rápido mover uma pasta para C:\stufftodelete`. Copying is slooow, but you don't want that. If you have another drive (eg E:), also create E: \ stufftodelete` e sempre mova os arquivos para a mesma pasta da unidade e inclua-a em deletestuff.bat (que também recria as pastas no final da próxima vez). - Hugo


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 isso Aqui.


16



E use um link físico para criar uma conexão entre o disco e o diretório em que os arquivos serão armazenados, se necessário. - Nime Cloud
@NimeCloud: Hardlinks não podem cruzar sistemas de arquivos ou diretórios de links. - grawity
No entanto, links simbólicos posso cruzar sistemas de arquivos e diretórios de links, para que possam ser apropriados aqui. Veja o comando mklink (Vista e posterior; caso contrário, use a junção de Mark Russinovich / SysInternals.) - Robert Calhoun


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

del /f /s /q foldername 

9



Isso é ótimo porque ele lista o que está excluindo ... mas é o mesmo que rd em termos de velocidade. - bobobobo
Oh woah woah woah Não tão bom quanto eu pensava. Exclui os arquivos rapidamente, mas deixa a árvore de diretórios intacta. - bobobobo
O que eu devo adicionar leva muito tempo para limpar usando rd. - bobobobo
@bobobobo Fiz alguns testes com ~ 30GB / 1.000.000 de arquivos / 15.000 pastas e del + rd é quase três vezes mais rápido que apenas rd: superuser.com/questions/19762/mass-deleting-files-in-windows/… - Hugo
Eu acho que rmdir é mais rápido em algumas situações. del . / f / s / q é bom porque você também pode excluir o conteúdo de todos os arquivos dentro de um diretório. Depois que você terminar, é apenas uma questão de excluir as pastas, o que é rápido o suficiente. Além disso, lembre-se de attrib -s -h -r . / s se você não pode excluir pastas por causa de arquivos ocultos. - Sun


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: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


6



Você já fez ou viu algumas comparações de tempo semelhantes de TeraCopy vs rmdir ou del ou del + rmdir? - Hugo
@Hugo: pergunta estúpida. Eu não recomendaria o TeraCopy se não fosse visto de olho simples, é mais rápido! - rautamiekka
Então você estima que é 10% mais rápido? Duas vezes mais rápido? Dez vezes mais rápido? Um milhão de vezes mais rápido? Seria ótimo se você pudesse compará-lo com rmdir com dois conjuntos de testes grandes e idênticos. - Hugo
@Hugo: Dependendo do tamanho do arquivo / contagem e fragmentação e CPU, 2x a 5x mas geralmente rápido demais para considerar o uso de meios integrados ao Win para grandes e / ou arquivos, se você economizar um minuto ou 20. [reeditado após hit acidental de Enter] - rautamiekka
Obrigado! Eu tenho usado o TeraCopy por anos, mas nunca soube sobre a função delete em massa. E você está certo, é muito, muito mais rápido! - AzDayton


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

faça o trabalho em duas etapas, uma, tente deletar os arquivos. E o segundo é tentar apropriar-se dos arquivos. y deve ser alterado de acordo com o seu 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-o como

 delfolder "foldername"   

onde nome da pasta é o nome da pasta

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


4



Este pequeno roteiro é incrível. Obrigado. - Jeson Martajaya
Normalmente você não deve usar %1 em um script, mas "%~1". Dessa forma, se o argumento tiver sido passado com aspas, ele será desqualificado e recalculado. Se não foi passado com aspas, é citado. - Benoit


Use o Comando rd / s no prompt de comando.


3



Não. Isso é tão lento quanto excluir do explorador. - bobobobo
Bem, está tudo bem. Funciona melhor que del / f / s / q, de qualquer forma. - bobobobo
Bem, isso é MUITO melhor do que usar o Explorer para excluir, na verdade. Ele continua a ser deletado, mesmo se uma exclusão ou duas falharem (onde o explorador sufoca e aborta) - bobobobo


Usando 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

3



Adicione um `> nul` ao final da chamada de robocopy para que você não tenha que vê-la na tela. - JoshDM
É semelhante ao uso de rsync no Linux. É até aqui mais rápido do que rmdir? - Hastur
FYI, este robocopy é muito diferente de del /f/q/s + rmdir /s/q. Se o seu dir_to_wipe tiver lixo para c:\some_important_dir você vai acabar perdendo seus dados. - Pavel


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 séculos, 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.


1





Instalar Cygwin E use rm -r. Mas é provável que seja um exagero.


1



Isso é exatamente o mesmo que rd /q /s ... - Joey
Tarefa demais e velocidade quase equivalente! - adeelx
Não é pior do que as várias outras opções instalar-ferramenta-X-and-use-it aqui, e não devem ser rejeitadas se não estiverem sendo. - JdeBP
É cygwin rm realmente tão rápido quanto o cmd.exe embutido rd? Porque a emulação cygwin da interface posix é bastante lenta, pois requer um trabalho extra, rm não realmente aprecio. - Jan Hudec
Enquanto aguarda uma grande coleção de arquivos para excluir eu tive tempo suficiente para instalar o Cygwin e tente rm -rf. Cerca de 10 minutos depois abortei e voltei para del /f/s/q porque sob o Cygwin, o uso do disco foi de apenas 50%. Sob del, o uso de disco é indexado em 100%. Então eu acho que deve ser deletado mais rápido. O uso da CPU é <1% para ambos os métodos. Eu não tenho certeza sobre o número do arquivo porque eu fechei o Deleter de Arquivo do Windows depois que ele gastou 10 minutos calculando. - Derek Ziemba


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. Portanto, se você tiver o dobro do número de nomes a remover, a quantidade de trabalho será significativamente maior.


1





Você já tentou um desses dois aplicativos?

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.


0