Переместить все файлы в подкаталогах, содержащихся в одном родительском каталоге, в N подкаталогов - PullRequest
0 голосов
/ 15 февраля 2020

Итак, у меня есть каталог с 44 подкаталогами. В каждом из этих подкаталогов содержится 15 000 файлов.

Я хотел бы сделать следующее: для каждого подкаталога создать подкаталог с максимальным количеством файлов N, т.е. 5000.

From: Parent -> Подкаталог с 15 000 файлов

Кому: Родитель -> Подкаталог -> N Подкаталоги (с именами, начинающимися с 1), каждый с макс. N файлов.

Любые советы о том, как подойти к этому, очень ценятся!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Что ж, после долгих раздумий с незнакомым миром PS я сумел сам написать решение:

$filesperfolder = 3000
$sourcePath = "E:\parent\subdirectory"

$j = 0;
$folderNum = 1;

$range = 44

foreach($i in 1..$range) {
    $path = $sourcePath + "\" + $i
    Get-ChildItem "$path\*" -File | % {
        New-Item -Path ($path + "\" + $folderNum) -Type Directory -Force
        Move-Item $_ ($path + "\" + $folderNum);
        $j++;
        if ($j -eq $filesperfolder) {
            $folderNum++;
            $j = 0;
        }
    }
    $folderNum = 1;
}

Что действительно хорошо работает в моей ситуации! Каждый подкаталог размером 15-17 ГБ занимает по 1-1,5 минуты.

0 голосов
/ 15 февраля 2020

Я бы начал с итерации по каждому из каталогов.

$My44Subdirs = gci -directory "Path_to_my_Main_directory"

Для каждого из каталогов я бы загрузил все файлы с

[array]$AllFiles = gci "path_to_one_of_your_subdirectories"

Наконец, вы могли бы используйте дескрипторы массива для l oop через группы файлов.

$ctr=0
$maxperfolder=5000
Do
{
    ForEach ($file in $AllFiles[$ctr..($ctr+$maxPerFolder-1)])
    {
        move the files here
    {
    $ctr += $maxPerFolder
} Until ($ctr -gt "total_#_of_Files_in_this_folder")

Я сделал это немного обобщенным c, чтобы вы могли адаптировать его по своему усмотрению.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...