대규모 파일 풀에서 특정 수의 파일을 폴더로 이동

대규모 파일 풀에서 특정 수의 파일을 폴더로 이동

단일 폴더에 1백만 개의 파일이 있습니다(출처). 새 폴더를 만들고 5K 파일을 그 폴더로 옮기고 소스의 모든 파일이 별도의 대상 폴더로 이동할 때까지 반복하고 싶습니다. 최종 결과는 각각 5K 파일이 포함된 200개의 새 폴더가 됩니다. 나는 Windows에서 이 작업을 수행하는 것이 바람직합니다.

폴더 이름은 임의로 생성할 수 있으며 파일은 풀에서 임의로 선택할 수 있습니다.

업데이트 1: 결과 200개 폴더는 루트 바로 아래에 있으므로 대상 폴더 구조가 필요하지 않습니다.

답변1

정확히 원하는 내용에 답하기 위해 5,000개의 파일을 폴더로 이동하고, 1이동할 파일이 부족해질 때까지 계속 진행합니다. 마지막 폴더에는 파일이 5,000개 미만일 가능성이 높습니다.

Powershell에서는 테스트되지 않았으므로 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 ;
    }
}

이는 귀하가 요청한 내용과 일치하지 않습니다.정확히이지만 이 문제를 해결하는 일반적인 방법은 파일 이름의 첫 번째 문자를 기준으로 파일을 두 가지 깊이로 나누는 것입니다.

이렇게 하면 파일이 균등하게 배포되지 않지만 파일 이름이 GUID로 지정된 경우 각 수준에서 폴더 수는 256개로 제한됩니다.

Powershell에서 다음을 정렬하려면 다음 *.pdf을 수행합니다 .c:\tempc:\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
}

관련 정보