다음을 통해 공유


Compress-Archive

지정된 파일 및 디렉터리에서 압축된 보관 파일 또는 압축된 파일을 만듭니다.

구문

Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

Description

Compress-Archive cmdlet은 하나 이상의 지정된 파일 또는 디렉터리에서 압축되거나 압축된 보관 파일을 만듭니다. 보관 파일은 선택적 압축을 사용하여 여러 파일을 더 쉽게 배포하고 스토리지할 수 있는 단일 압축 파일로 패키지합니다. CompressionLevel 매개 변수로 지정된 압축 알고리즘을 사용하여 보관 파일을 압축할 수 있습니다.

Compress-Archive cmdlet은 System.IO.Compression.ZipArchive API를 사용하여 파일을 압축합니다. API는 최대 파일 크기를 2GB로 제한합니다. 자세한 내용은 System.IO.Compression.ZipArchive참조하세요.

메모

Compress-Archive cmdlet은 보관 파일을 만들거나 업데이트할 때 숨겨진 파일 및 폴더를 무시합니다. 비 Windows 컴퓨터에서는 마침표(.) 문자로 시작하는 이름의 파일 및 폴더가 포함됩니다.

숨겨진 파일 및 폴더가 보관 파일로 압축되도록 하려면 대신 .NET API를 사용합니다.

일부 예제에서는 스플래팅을 사용하여 코드 샘플의 줄 길이를 줄입니다. 자세한 내용은 about_Splatting참조하세요.

예제

예제 1: 파일을 압축하여 보관 파일 만들기

다음은 다른 디렉터리에서 파일을 압축하고 보관 파일을 만드는 예제입니다. 와일드카드는 특정 파일 확장자를 가진 모든 파일을 가져오는 데 사용됩니다. 경로 파일 이름만 지정하므로 보관 파일에 디렉터리 구조가 없습니다.

$compress = @{
  Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
  CompressionLevel = "Fastest"
  DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Path 매개 변수는 와일드카드가 있는 특정 파일 이름 및 파일 이름을 *.vsd허용합니다. 경로 쉼표로 구분된 목록을 사용하여 다른 디렉터리에서 파일을 가져옵니다. 압축 수준은 처리 시간을 줄이기 위해 가장 빠른 . DestinationPath 매개 변수는 Draft.zip 파일의 위치를 지정합니다. Draft.zip 파일에는 Draftdoc.docx.vsd 확장이 있는 모든 파일이 포함됩니다.

예제 2: LiteralPath를 사용하여 파일 압축

다음은 명명된 특정 파일을 압축하고 새 보관 파일을 만드는 예제입니다. 경로 파일 이름만 지정하므로 보관 파일에 디렉터리 구조가 없습니다.

$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

LiteralPath 매개 변수는 와일드카드를 허용하지 않으므로 절대 경로 및 파일 이름이 사용됩니다. 경로 쉼표로 구분된 목록을 사용하여 다른 디렉터리에서 파일을 가져옵니다. 압축 수준은 처리 시간을 줄이기 위해 가장 빠른 . DestinationPath 매개 변수는 Draft.zip 파일의 위치를 지정합니다. Draft.zip 파일에는 Draftdoc.docxdiagram2.vsd포함됩니다.

예제 3: 루트 디렉터리를 포함하는 디렉터리 압축

이 예제에서는 디렉터리를 압축하고 루트 디렉터리와 모든 파일 및 하위 디렉터리에 포함하는 보관 파일을 만듭니다. Path 루트 디렉터리를 지정하므로 보관 파일에는 디렉터리 구조가 있습니다.

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip

Compress-Archive Path 매개 변수를 사용하여 루트 디렉터리 C:\Reference지정합니다. DestinationPath 매개 변수는 보관 파일의 위치를 지정합니다. Draft.zip 보관에는 Reference 루트 디렉터리와 모든 파일 및 하위 디렉터리가 포함됩니다.

예제 4: 루트 디렉터리를 제외하는 디렉터리 압축

이 예제에서는 디렉터리를 압축하고 경로 별표(*) 와일드카드를 사용하므로 루트 디렉터리에 제외할 보관 파일을 만듭니다. 보관 파일에는 루트 디렉터리의 파일 및 하위 디렉터리가 포함된 디렉터리 구조가 포함되어 있습니다.

Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip

Compress-Archive Path 매개 변수를 사용하여 별표(*) 와일드카드로 C:\Reference 루트 디렉터리를 지정합니다. DestinationPath 매개 변수는 보관 파일의 위치를 지정합니다. Draft.zip 보관 파일에는 루트 디렉터리의 파일 및 하위 디렉터리가 포함됩니다. Reference 루트 디렉터리가 보관에서 제외됩니다.

예제 5: 루트 디렉터리의 파일만 압축

이 예제에서는 루트 디렉터리의 파일만 압축하고 보관 파일을 만듭니다. 파일만 압축되므로 보관에 디렉터리 구조가 없습니다.

Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip

Compress-Archive Path 매개 변수를 사용하여 루트 디렉터리를 지정하고, star-dot-star(*.*) 와일드카드로 C:\Reference. DestinationPath 매개 변수는 보관 파일의 위치를 지정합니다. Draft.zip 보관 파일에는 Reference 루트 디렉터리의 파일만 포함되며 루트 디렉터리가 제외됩니다.

예제 6: 파이프라인을 사용하여 파일 보관

이 예제에서는 파일을 파이프라인 아래로 전송하여 보관 파일을 만듭니다. 경로 파일 이름만 지정하므로 보관 파일에 디렉터리 구조가 없습니다.

Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
  Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip

Get-ChildItem Path 매개 변수를 사용하여 서로 다른 디렉터리에서 두 개의 파일을 지정합니다. 각 파일은 FileInfo 개체로 표시되며 파이프라인 아래로 전송되어 Compress-Archive. 지정된 두 파일은 PipelineFiles.zip보관됩니다.

예제 7: 파이프라인을 사용하여 디렉터리 보관

이 예제에서는 파이프라인 아래로 디렉터리를 전송하여 보관 파일을 만듭니다. 파일은 FileInfo 개체 및 디렉터리로 DirectoryInfo 개체로 전송됩니다. 보관 파일의 디렉터리 구조에는 루트 디렉터리가 포함되지 않지만 해당 파일 및 하위 디렉터리가 보관 파일에 포함됩니다.

Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip

Get-ChildItem Path 매개 변수를 사용하여 C:\LogFiles 루트 디렉터리를 지정합니다. 각 FileInfoDirectoryInfo 개체가 파이프라인 아래로 전송됩니다.

Compress-Archive 각 개체를 PipelineDir.zip 보관 파일에 추가합니다. 파이프라인 개체가 매개 변수 위치 0으로 수신되므로 Path 매개 변수가 지정되지 않습니다.

예제 8: 재귀가 보관에 영향을 줄 수 있는 방법

이 예제에서는 재귀가 보관 파일에서 파일을 복제하는 방법을 보여 줍니다. 예를 들어 Recurse 매개 변수와 함께 Get-ChildItem 사용하는 경우입니다. 재귀 프로세스가 진행되면 각 FileInfoDirectoryInfo 개체가 파이프라인 아래로 전송되고 보관 파일에 추가됩니다.

Get-ChildItem -Path C:\TestLog -Recurse |
  Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip

C:\TestLog 디렉터리에는 파일이 없습니다. testlog.txt 파일이 포함된 testsub 하위 디렉터리가 포함되어 있습니다.

Get-ChildItem Path 매개 변수를 사용하여 루트 디렉터리 C:\TestLog지정합니다. 재귀 매개 변수는 파일 및 디렉터리를 처리합니다. DirectoryInfo 개체는 testsub 대해 만들어지고 FileInfo 개체는 testlog.txt.

각 개체는 파이프라인 아래로 전송되어 Compress-Archive. DestinationPath 보관 파일의 위치를 지정합니다. 파이프라인 개체가 매개 변수 위치 0으로 수신되므로 Path 매개 변수가 지정되지 않습니다.

다음 요약에서는 중복 파일이 포함된 PipelineRecurse.zip 보관 파일의 내용을 설명합니다.

  • DirectoryInfo 개체는 testsub 디렉터리를 만들고 원래 디렉터리 구조를 반영하는 testlog.txt 파일을 포함합니다.
  • FileInfo 개체는 보관의 루트에 중복 testlog.txt 만듭니다. 재귀가 파일 개체를 Compress-Archive보냈기 때문에 중복 파일이 만들어집니다. 파이프라인 아래로 전송된 각 개체가 보관 파일에 추가되므로 이 동작이 필요합니다.

예제 9: 기존 보관 파일 업데이트

다음은 C:\Archives 디렉터리에서 Draft.zip기존 보관 파일을 업데이트하는 예제입니다. 이 예제에서 기존 보관 파일에는 루트 디렉터리와 해당 파일 및 하위 디렉터리가 포함됩니다.

Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip

이 명령은 C:\Reference 디렉터리 및 해당 하위 디렉터리에 있는 기존 파일의 최신 버전으로 Draft.zip 업데이트합니다. 또한 C:\Reference 또는 해당 하위 디렉터리에 추가된 새 파일이 업데이트된 Draft.zip 보관 파일에 포함됩니다.

매개 변수

-CompressionLevel

보관 파일을 만들 때 적용할 압축의 양을 지정합니다. 압축 속도가 빨라질수록 파일을 만드는 데 더 적은 시간이 필요하지만 파일 크기가 커질 수 있습니다.

이 매개 변수를 지정하지 않으면 명령은 기본값인 Optimal사용합니다.

다음은 이 매개 변수에 허용되는 값입니다.

  • 가장 빠른. 처리 시간을 줄이는 데 사용할 수 있는 가장 빠른 압축 방법을 사용합니다. 압축 속도가 빨라질수록 파일 크기가 커질 수 있습니다.
  • NoCompression. 원본 파일을 압축하지 않습니다.
  • 최적 . 처리 시간은 파일 크기에 따라 달라집니다.
형식:String
허용되는 값:Optimal, NoCompression, Fastest
Position:Named
Default value:Optimal
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Confirm

cmdlet을 실행하기 전에 확인 메시지를 표시합니다.

형식:SwitchParameter
별칭:cf
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-DestinationPath

이 매개 변수는 필수이며 보관 출력 파일의 경로를 지정합니다. DestinationPath 압축된 파일의 이름과 압축된 파일의 절대 또는 상대 경로를 포함해야 합니다.

DestinationPath 파일 이름 확장명이 .zip 없는 경우 cmdlet은 .zip 파일 이름 확장명을 추가합니다.

형식:String
Position:1
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Force

기존 보관 파일을 덮어쓰려면 이 매개 변수를 사용합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-LiteralPath

압축된 보관 파일에 추가하려는 파일의 경로 또는 경로를 지정합니다. Path 매개 변수와 달리 LiteralPath 값은 입력된 대로 정확하게 사용됩니다. 와일드카드로 해석되는 문자는 없습니다. 경로에 이스케이프 문자가 포함된 경우 각 이스케이프 문자를 작은따옴표로 묶어 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다. 여러 경로를 지정하고 출력 압축 파일의 여러 위치에 파일을 포함하려면 쉼표로 경로를 구분합니다.

형식:String[]
별칭:PSPath
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-PassThru

cmdlet이 만든 보관 파일을 나타내는 파일 개체를 출력하도록 합니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Path

압축된 보관 파일에 추가하려는 파일의 경로 또는 경로를 지정합니다. 여러 경로를 지정하고 여러 위치에 파일을 포함하려면 쉼표로 경로를 구분합니다.

이 매개 변수는 와일드카드 문자를 허용합니다. 와일드카드 문자를 사용하면 디렉터리의 모든 파일을 보관 파일에 추가할 수 있습니다.

루트 디렉터리에서 와일드카드를 사용하면 보관 파일의 내용에 영향을 줍니다.

  • 루트 디렉터리와 모든 파일 및 하위 디렉터리를 포함하는 보관 파일을 만들려면 와일드카드 없이 경로 루트 디렉터리를 지정합니다. 예: -Path C:\Reference
  • 루트 디렉터리에 제외하지만 모든 파일 및 하위 디렉터리를 압축하는 보관 파일을 만들려면 별표(*) 와일드카드를 사용합니다. 예: -Path C:\Reference\*
  • 루트 디렉터리의 파일만 압축하는 보관 파일을 만들려면 star-dot-star(*.*) 와일드카드를 사용합니다. 루트의 하위 디렉터리가 보관 파일에 포함되지 않습니다. 예: -Path C:\Reference\*.*
형식:String[]
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:True

-Update

보관 파일의 이전 파일 버전을 이름이 같은 최신 파일 버전으로 바꿔 지정된 보관 파일을 업데이트합니다. 이 매개 변수를 추가하여 기존 보관 파일에 파일을 추가할 수도 있습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-WhatIf

cmdlet이 실행되면 어떻게 되는지 보여 주세요. cmdlet이 실행되지 않습니다.

형식:SwitchParameter
별칭:wi
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

String

하나 이상의 파일에 대한 경로가 포함된 문자열을 파이프할 수 있습니다.

출력

None

기본적으로 이 cmdlet은 출력을 반환하지 않습니다.

FileInfo

PassThru 매개 변수를 사용하는 경우 이 cmdlet은 FileInfo 개체를 반환합니다.

참고

재귀를 사용하고 파이프라인 아래로 개체를 보내면 보관 파일의 파일이 중복될 수 있습니다. 예를 들어 Recurse 매개 변수와 함께 Get-ChildItem 사용하는 경우 각 FileInfo 및 파이프라인 아래로 전송된 DirectoryInfo 개체가 보관 파일에 추가됩니다.

Compress-Archive cmdlet은 UTF-8 인코딩을 사용합니다. 다른 ZIP 보관 도구는 다른 인코딩 체계를 사용할 수 있습니다. UTF-8 인코딩을 사용하여 파일 이름이 저장되지 않은 파일을 추출하는 경우 Expand-Archive 보관 파일에 있는 원시 값을 사용합니다. 이렇게 하면 보관 파일에 저장된 원본 파일 이름과 다른 파일 이름이 발생할 수 있습니다.