IT/기초 지식

[Linux] tar.gz 압축/해제 커맨드

개발자 두더지 2022. 5. 23. 20:46
728x90

압축


tar -zcvf filename.tar.gz directoryname

 

 

해제


tar -zxvf filename.tar.gz

 

 

옵션


각 옵션에 대한 설명은 다음과 같다.

옵션 풀네임 의미
-z --gzip gzip 형식으로할 것을 지정
-c --create 새롭게 압축파일을 만듦
-v --verbose 처리 결과를 출력
-f --file 압축 파일의 이름
-x --extract 압축파일에서 파일을 빼냄

 

 

추가) 특정 파일을 제외하고 압축/해제하고 싶을 경우


 tar 커맨드에 "--exlude 패턴"을 지정하여 특정 파일을 제외하고 처리를 할 수 있다. "패턴"으로는 파일명이나 디렉토리명을 지정할 수 있다. 이때 "*", "?", "[...]" 과 같은 와일드 카드를 사용해서 이름을 지정할 수 있다.

 예를 들어, 현재 디렉토리가 다음과 같은 구성으로 되어 있다고 가정하자.

$ tree tar-test/
tar-test/
├── test_1
│   ├── test_1
│   │   ├── test_1.txt
│   │   ├── test_2.txt
│   │   └── test_x.txt
│   ├── test_2
│   │   ├── test_1.txt
│   │   ├── test_2.txt
│   │   └── test_x.txt
│   └── test_x
│       ├── test_1.txt
│       ├── test_2.txt
│       └── test_x.txt
├── test_2
│   ├── test_1
│   │   ├── test_1.txt
│   │   ├── test_2.txt
│   │   └── test_x.txt
│   ├── test_2
│   │   ├── test_1.txt
│   │   ├── test_2.txt
│   │   └── test_x.txt
│   └── test_x
│       ├── test_1.txt
│       ├── test_2.txt
│       └── test_x.txt
└── test_x
    ├── test_1
    │   ├── test_1.txt
    │   ├── test_2.txt
    │   └── test_x.txt
    ├── test_2
    │   ├── test_1.txt
    │   ├── test_2.txt
    │   └── test_x.txt
    └── test_x
        ├── test_1.txt
        ├── test_2.txt
        └── test_x.txt

12 directories, 27 files

 아래의 커맨드로 test_2를 제외하고 압축할 수 있다. 이름이 "test_2"와 일치하는 파일이나 디렉터리있다면 제외되고 tar 압축 파일이 생성된다.

$ tar --exclude test_2 -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_x/
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_2.txt
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_x/test_x.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_2.txt
tar-test/test_x/test_1/test_1.txt
tar-test/test_x/test_1/test_x.txt
tar-test/test_1/
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_2.txt
tar-test/test_1/test_x/test_1.txt
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_2.txt
tar-test/test_1/test_1/test_1.txt
tar-test/test_1/test_1/test_x.txt

 처리 결과를 보면 알 수 있듯, tar-test/test_2/」「tar-test/test_1/test_2/」「tar-test/test_x/test_2/」 디렉토리 밑으로는 제외됐다. 하지만, 각 디렉토리에 있는 "test_2.txt"라는 텍스트 파일은 포함됐다.

 따라서 이 텍스트 파일 또한 제외하고 싶은 경우 앞에서 설명했던 와일드 카드를 쓰면 된다. 다음과 같이 "--exclude "text_2*"로 지정하면, 이름 문자열이 test_2으로 시작하는 파일이나 디렉토리가 압축 파일 대상에서 제외된다.

$ tar --exclude "test_2*" -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_x/
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_x/test_x.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_1.txt
tar-test/test_x/test_1/test_x.txt
tar-test/test_1/
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_1.txt
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_1.txt
tar-test/test_1/test_1/test_x.txt

 또한 다른 와일드 카드인 "[...]"를 이용해보면, 다음과 같이 이름이 test_1」 혹은 「test_2」로 시작되는 파일명이나 디렉토리가 제외되어 커맨드가 실행된다. 

$ tar --exclude "test_[12]*" -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_x/
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_x.txt

 그리고 여러 개의 패턴을 사용하여 여러가지 파일을 동시에 제외시킬 수 있다. 다음과 같이 단순히 --exclude 패턴을 몇 개 더 추가하면 된다.

$ tar --exclude "test_1/test_*/test_[12]*" --exclude "test_x/test_*/test_x*" -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_2/
tar-test/test_2/test_2/
tar-test/test_2/test_2/test_2.txt
tar-test/test_2/test_2/test_1.txt
tar-test/test_2/test_2/test_x.txt
tar-test/test_2/test_x/
tar-test/test_2/test_x/test_2.txt
tar-test/test_2/test_x/test_1.txt
tar-test/test_2/test_x/test_x.txt
tar-test/test_2/test_1/
tar-test/test_2/test_1/test_2.txt
tar-test/test_2/test_1/test_1.txt
tar-test/test_2/test_1/test_x.txt
tar-test/test_x/
tar-test/test_x/test_2/
tar-test/test_x/test_2/test_2.txt
tar-test/test_x/test_2/test_1.txt
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_2.txt
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_2.txt
tar-test/test_x/test_1/test_1.txt
tar-test/test_1/
tar-test/test_1/test_2/
tar-test/test_1/test_2/test_x.txt
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_x.txt

참고자료

https://linuxfan.info/tar-exclude

https://qiita.com/HyunwookPark/items/047ba2da9ef16bcac356

728x90