[go] 파일 경로에서 파일 압축하기

Golang은 경로에 있는 파일들을 압축하는 기능을 제공하는 많은 라이브러리가 있습니다. 이 포스트에서는 compress 패키지를 사용하여 파일 경로에서 파일을 압축하는 방법을 다룰 것입니다.

파일 경로에서 파일 압축하기

먼저 compress 패키지를 import하여 관련된 기능을 사용할 수 있도록 준비합니다.

import (
    "archive/zip"
    "os"
    "path/filepath"
)

다음으로 압축할 파일들이 담긴 디렉토리의 경로를 지정합니다.

sourceDir := "/path/to/sourceDirectory"

그리고 압축 파일의 경로와 이름을 설정합니다.

destinationFile := "/path/to/destination/archive.zip"

이제 아래의 코드로 파일을 압축합니다.

destination, err := os.Create(destinationFile)
if err != nil {
    panic(err)
}
defer destination.Close()

zipWriter := zip.NewWriter(destination)
defer zipWriter.Close()

filepath.Walk(sourceDir, func(filePath string, info os.FileInfo, err error) error {
    if err != nil {
        return err
    }
    if info.IsDir() {
        return nil
    }

    relativePath, err := filepath.Rel(sourceDir, filePath)
    if err != nil {
        return err
    }

    file, err := os.Open(filePath)
    if err != nil {
        return err
    }
    defer file.Close()

    destination, err := zipWriter.Create(relativePath)
    if err != nil {
        return err
    }

    if _, err := io.Copy(destination, file); err != nil {
        return err
    }

    return nil
})

위의 코드는 지정된 경로의 파일을 압축파일로 만드는 일련의 과정을 보여줍니다.

압축 파일을 열어서 다음과 같이 파일이 제대로 압축되었는지 확인할 수 있습니다.

zipReader, err := zip.OpenReader(destinationFile)
if err != nil {
    panic(err)
}
defer zipReader.Close()

for _, file := range zipReader.File {
    fmt.Println(file.Name)
}

이제 파일 경로에서 파일을 압축하는 방법에 대해 알아 보았습니다. 이 기능을 이용하면 파일 시스템에서 파일을 압축하여 효율적으로 관리할 수 있습니다.

Reference: