Como posso mover um diretório enorme com MILHÕES de arquivos?

3

Eu tenho um cliente que não sabe nada sobre computadores, e fez um formato e reinstalou a partição de recuperação de sua antiga área de trabalho AMD Athlon II X4 executando o Windows 7. Essa era sua principal máquina comercial.

Eu usei o Recuva e o DiskDigger de um ambiente Live para copiar os arquivos para o meu disco rígido externo de 3 TB.

Mal sabia eu, DiskDigger tem um limite de nome de destino de arquivo, então eu fui forçado a usar o diretório raiz do meu disco rígido já bastante completo. Demorou quase 3 dias para executar os dois programas e, agora, nem o Windows Explorer nem um gerenciador de arquivos mínimo no Puppy Linux podem carregar o diretório completamente.

Eu tentei usar o Folder Axe (um divisor de pastas) para dividir o diretório raiz em partes mais gerenciáveis, mas fica aquém da escolha dessa pasta para trabalhar.

Eu tentei otimizar a pasta para documentos, (eu li que reduz o tempo de carregamento no Explorer) e desabilitando nomes de arquivos 8.3 no Windows.

Sim, eu sei que havia outra pergunta no SU sobre "pasta do windows com milhões de arquivos não respondendo". Mas nenhuma das respostas foi realmente tão grande, nem realmente pertence ao meu problema em particular.

Alguma idéia, soluções alternativas, palpites?

    
por Truefire 22.04.2014 / 02:01

2 respostas

1

Se eu entendi isso corretamente, você tem o seguinte problema:

  • Você executou uma ferramenta de recuperação de arquivos, que não pode recuperar a estrutura de pastas
  • Agora há aproximadamente um gazilhão de arquivos em um único diretório
  • Qualquer coisa que tente enumerar esses arquivos trava
  • Você tentou dividir isso em subpastas, mas até essa ferramenta trava

Sorte a sua, eu encontrei outros 1.562.922 arquivos remanescentes de este debacle ... Tenho certeza que podemos dividir isso em subpastas usando o PowerShell.

Primeiro, vamos iniciar o PowerShell ISE e enumerar todos os arquivos e armazená-los em uma variável.

$files = ls C:\recovered\

Execute esse comando e vá almoçar. Eu prometo que terminará eventualmente ...

Agora, vamos percorrer todos esses arquivos e movê-los para subpastas gerenciáveis. Primeiro, vamos ver com quantas pessoas estamos lidando:

$files.count

Vou tentar explicar em pedaços para que você possa mudá-lo facilmente para as suas necessidades ... Perdoe-me se isso for muito detalhado para você. Começaremos configurando nosso loop:

#This is to keep track of files
$i = 0

#This is to keep track of subfolders
$x = 0

do
{

}
while ($i -le $files.count)

Eu escolhi dividir o meu a cada 1.000 arquivos:

$i = 0
$x = 0

do
{
    #If $i is divisible by 1000 with no remainder...
    #Create a new folder
    if ($i % 1000 -eq 0){

            #Increment x
            $x++

            #Log progress to the console
            Write-Host "Creating folder $x..."

            #Create the new folder
            #Start with a DIFFERENT root folder
            New-Item -Path C:\recovered_subfolders -Name $x -ItemType directory
        }
}
while ($i -le $files.count)

Inicie este processo em uma pasta diferente da que você recuperou todos os arquivos, assim você pode ver os arquivos imediatamente.

Agora, realmente movemos os arquivos. Foi assim que meu script inteiro se parecia:

$i = 0
$x = 0

do
{
    if ($i % 1000 -eq 0){
            $x++
            Write-Host "Creating folder $x..."
            New-Item -Path C:\recovered_subfolders -Name $x -ItemType directory
        }
    Move-Item $files[$i] -Destination C:\recovered_subfolders\$x\
    $i++
}
while ($i -le $files.count)

Funciona há cerca de 20 minutos e já recebi 22.000 arquivos. Parece que você tem outro projeto de fim de semana à sua frente. Boa sorte.

    
por 09.07.2014 / 23:40
0

Eu tentaria usar XCOPY ( help xcopy em cmd.exe), mas certifique-se de informá-lo apenas sobre o nome da pasta; ou seja, não: folder\* . Por exemplo:

xcopy /Q /Y C:\clientPath\bigDirectory Z:\externalPath\bigDirectory

Isso irá copiar o diretório silenciosamente ( /Q ) sobrescrevendo ( /Y ) todos os arquivos.

    
por 25.04.2014 / 20:36