Eu tenho um diretório que contém ~ 3 milhões de arquivos em determinados subdiretórios em um servidor Windows 2008. A exclusão manual dos arquivos via SHIFT + DEL no diretório raiz leva séculos. Existe alguma outra maneira de fazer a exclusão de maneira mais rápida ?
windows
file-management
Cfinley
fonte
fonte
Respostas:
AVISO: se você tiver links simbólicos para diretórios,
del
os diretórios reais serão excluídos e não os links simbólicos. Tenha muito cuidado com isso e não execute esses comandos, a menos que saiba que não há links simbólicos no diretório de destino.Eu regularmente preciso excluir muitos arquivos e diretórios de uma unidade criptografada WinXP, geralmente cerca de 22 GB de 500.000 arquivos em 45.000 pastas.
Excluir com o Windows Explorer é um lixo, pois gasta muito tempo enumerando os arquivos. Normalmente, movo as coisas que preciso excluir para C: \ stufftodelete e tenho um arquivo em lotes 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 para que 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. Executei o método 1 seguido pelo método 2 e redefini os diretórios de teste.
O método 1 remove os arquivos e a estrutura de diretórios em uma passagem:
O método 2 tem uma primeira passagem para excluir arquivos e saídas para nul para evitar a sobrecarga de gravar na tela para cada arquivo de singe. Uma segunda passagem limpa a estrutura de diretórios restante:
Aqui estão os resultados de outro teste usando 404 MB de 19.521 arquivos em 3.243 pastas:
Portanto, não há muito, provavelmente perto demais para julgar em um único teste.
Edit: Testei novamente com muito mais dados; este é um caso típico para mim: 28,3 GB de 1.159.211 arquivos em 146.918 pastas:
Uau, o método 2 é quase três vezes mais rápido que o método 1! Vou atualizar meu deletestuff.bat!
fonte
del
os diretórios reais serão excluídos e não os links simbólicos. Tenha muito cuidado com isso e não execute esses comandos, a menos que saiba que não há links simbólicos no diretório de destino.Se você precisar excluir grandes árvores de diretório regularmente, considere armazenar a raiz dessa árvore em uma partição separada e simplesmente formate-a rapidamente sempre que precisar excluir tudo. Se você precisar automatizar isso, poderá usar este comando do DOS:
onde Z: é sua partição 'volátil'. Nota: a partição não deve ter rótulo. Eu escrevi sobre isso aqui .
fonte
No prompt de comando (Iniciar -> Executar ->
cmd
):fonte
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 vou copiar / mover / excluir).
O mesmo instalador instala a edição x64, mas para usá-lo, você deve forçá-lo manualmente.
A versão beta que recomendo nas versões estáveis: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
fonte
Eu fiz um arquivo bat que faz o mesmo.
ele faz o trabalho em duas etapas, uma, tenta excluir os arquivos. E o segundo é tentar se apropriar dos arquivos. y deve ser alterado de acordo com o seu local (defina yes em inglês). Se a tarefa falhar (por exemplo, se falhar porque a permissão), você deverá executá-la novamente. No entanto, a segunda rodada não tentará excluir os arquivos excluídos na primeira rodada, portanto 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
onde foldername é o nome da pasta
No meu teste, a exclusão de 123'000 arquivos levou 3 minutos (sata 7200rpm). YAY!
fonte
%1
um script, mas"%~1"
. Dessa forma, se o argumento tiver sido passado com aspas, ele será cotado e requoted. Se não foi passado entre aspas, é citado.Usar o código abaixo geralmente funciona bem para mim.
fonte
rsync
no Linux. Está aqui mais rápido aindarmdir
?del /f/q/s
+rmdir /s/q
. Se o seu dir_to_wipe tiver junktions,c:\some_important_dir
você acabará perdendo seus dados.Use o comando rd / s no prompt de comando.
fonte
A melhor solução prática é provavelmente mover a pasta para outro lugar (por exemplo, a Lixeira) e começar a excluí-la. Vai levar séculos, mas pelo menos estará 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.
fonte
Instale o Cygwin e use rm -r . Mas isso provavelmente será um exagero.
fonte
rd /q /s
...rm
realmente tão rápido quanto o cmd.exerd
? Como a emulação cygwin da interface posix é bastante lenta, pois requer um trabalho extra, issorm
não é realmente bom.rm -rf
. Eu abortei cerca de 10 minutos e retorneidel /f/s/q
porque, sob Cygwin, o uso do disco era de apenas 50%. Abaixodel
, o uso do disco é indexado a 100%. Então, acho que deve ser excluído mais rapidamente. O uso da CPU é <1% para ambos os métodos. Não tenho certeza do número do arquivo, porque fechei o Deleter de Arquivo do Windows depois de dez minutos calculando.Você tem a geração curta de nome de arquivo ativada? Se sim, você realmente precisa disso? A remoção de 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.
fonte
Você já experimentou 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 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.
fonte
Isso é fornecido para complementar e aumentar as etapas das respostas mencionadas anteriormente.
Os dois métodos indicados acima parecem bastante eficazes, mas determinar o desempenho seria difícil, a menos que sejam ajustados exatamente nas mesmas condições:
Em seguida, execute as configurações por meio de Arquivo em Lote e use o Powershell Cmdlet para registrar e medir seu desempenho.
A seguir, estão algumas pastas de amostra (nomeadas como tamanho total) que eu experimentei, mas não consegui obter nenhum desempenho / resultado conclusivo.
r.bat
rd.bat
Powershell:
fonte
A resposta de Hugo é a mais rápida, mas não remove os arquivos ocultos ou do sistema na primeira passagem; portanto, se você quiser uma solução mais completa, use o parâmetro / a:
Sobre o arquivo BAT de 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 que você deseja remover, usar takeown e icacls alterará as permissões e os proprietários de arquivos externos a pasta.
Usando a ferramenta ln.exe, você pode listar todos os arquivos vinculados na pasta e saber se eles estão vinculados a arquivos fora da pasta (links não saturados):
fonte
A exclusão da pasta é mais rápida do que a exclusão de vários arquivos.
Portanto, se você preferir usar o mouse em vez do prompt de comando, poderá criar um diretório, mover os arquivos para lá e excluí-lo (com Shift + Del como você disse).
fonte