단일 폴더에 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:\temp
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
}