Mover um número específico de arquivos para pastas de um grande conjunto de arquivos

1

Eu tenho 1 milhão de arquivos em uma única pasta (fonte). Eu quero criar uma nova pasta, mova arquivos de 5K para ele e repita até que todos os arquivos na origem sejam movidos para pastas de destino separadas. O resultado final seria 200 novas pastas com 5 mil arquivos cada. Eu quero fazer isso no Windows, de preferência.

Os nomes das pastas podem ser criados aleatoriamente, os arquivos podem ser escolhidos aleatoriamente no pool.

Atualização 1: as 200 pastas resultantes residirão diretamente sob a raiz, portanto, nenhuma estrutura de pasta de destino é necessária.

    
por Regmi 17.06.2015 / 02:36

1 resposta

4

Para responder exatamente o que você quer, isso moverá 5.000 arquivos para pastas, começando com 1 e continuando até que fique sem arquivos para mover. Sua última pasta provavelmente terá menos de 5.000 arquivos.

No powershell, não testado, então YMMV.

$filesperfolder = 5000
$sourcePath = "C:\Temp"
$destPath = "C:\Temp\Sorted"
$i = 0;
$folderNum = 1;

Get-ChildItem "$sourcePath\*.pdf" | % {

    New-Item -Path ($destPath + "\" + $folderNum) -Type Directory -Force
    Move-Item $_ ($destPath + "\" + $folderNum);

    $i++;

    if ($i -eq $filesperfolder){
        $folderNum++;
        $i = 0 ;
    }
}

Isso não está de acordo com o que você fez exatamente , mas uma maneira comum de lidar com esse problema é dividir os arquivos em mais duas profundidades, com base nos primeiros caracteres do arquivo. nome do arquivo.

Isso não distribui os arquivos uniformemente, mas se os arquivos forem nomeados com GUIDs, você terá um limite de 256 pastas em cada nível.

No Powershell, para classificar *.pdf de c:\temp para c:\temp\sorted :

$sourcePath = "C:\Temp"
$destPath = "C:\Temp\Sorted"
Get-ChildItem "$folderPath\*.PDF" | %{
    $newFolder = $destPath + ("\" + $_.Name.SubString(0,2) + "\"  + $_.Name.SubString(3,2)).ToUpper();

    New-Item -Path $newFolder -Type Directory -Force
    Move-Item $_ $newFolder
}
    
por 17.06.2015 / 02:52

Tags