Исключить подкаталоги из Compress-Archive Powershell Cmd - PullRequest
0 голосов
/ 22 января 2019

Я заранее извиняюсь, если этот вопрос кажется странным, я впервые пытаюсь использовать powershell для чего-либо подобного.

У меня есть структура каталогов, подобная следующей:

DIR1/
    bin/
    obj/
    d1-file1
    d1-file2 
DIR2/
    bin/
    obj/
    d2-file1
    d2-file2
DIR3/
    bin/
    obj/
    d3-file1
    d3-file2

Я пытаюсь сжать этот список каталогов набором исключений верхнего уровня и подуровня.Например, я хотел бы исключить определенный каталог верхнего уровня (например, DIR2), а также исключить определенные подкаталоги из окончательного набора результатов (например, bin, obj).

Я пробовалЕсть несколько разных подходов, но, к сожалению, когда я перебираю подкаталоги, команда compress-archive заархивирует элементы подуровня без сохранения структуры каталогов верхнего уровня.Я хотел бы сохранить структуру каталогов верхнего уровня в архиве, исключая при этом указанные подкаталоги.

$entries = New-Object System.Collections.Generic.List[System.Object] 

# Get initial directory listing
$dirlist = Get-ChildItem $solutionFileLocation -ad -Exclude "DIR2" | ForEach-Object { $_.FullName }

# Exclude bin and obj directories and add entry path to our zip entry list
foreach ($dir in $dirlist)
{
    $sub = Get-ChildItem $dir -Exclude "bin", "obj" | ForEach-Object { $_.FullName }

    foreach ($itm in $sub)
    {
        $entries.Add($itm)
    }
}

Compress-Archive -LiteralPath $entries -CompressionLevel Optimal -DestinationPath "C:\Filename01212019.zip"

В результате получается архив, содержащий следующее:

d1-file1
d1-file2
d3-file1
d3-file2

Вместо желаемого результата:

DIR1/
    d1-file1
    d1-file2 
DIR3/
    d3-file1
    d3-file2

1 Ответ

0 голосов
/ 22 января 2019

Вот возможный вариант (что я имел в виду под моим комментарием)

$entries = New-Object System.Collections.Generic.List[System.Object] 

$exclude = "DIR2,DIR6"

# Get initial directory listing
$dirlist = Get-ChildItem $solutionFileLocation -ad -Exclude "$exclude" | ForEach-Object { $_.FullName }

# Exclude bin and obj directories and add entry path to our zip entry list
foreach ($dir in $dirlist)
{
    $sub = Get-ChildItem $dir -Exclude "bin", "obj" | ForEach-Object { $_.FullName }

    $entries.Add("$($dir.split('/')[-1])/")
    foreach ($itm in $sub)
    {
        $entries.Add($itm)
    }
}

Compress-Archive -LiteralPath $entries -CompressionLevel Optimal -DestinationPath "C:\Filename01212019.zip"

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

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