본문 바로가기
프로그래밍/LINUX , UNIX

tar.gz 압축 풀기 명령어 tar -xzvf, 다른 폴더에 풀기(-C)와 node_modules 빼고 압축하기까지 6가지 질문 (리눅스, 맥)

by 애플 로그 2026. 10. 19.
반응형

tar -tzf 목록 보기와 --strip-components=1 로 압축 푼 터미널 실행 결과

서버에서 받은 파일이 .tar.gz 로 끝나면 tar -xzvf 파일이름.tar.gz 한 줄이면 풀려요. 다만 "다른 폴더에 풀고 싶다", "폴더가 한 겹 더 생긴다", "파일 하나만 꺼내고 싶다" 같은 건 옵션을 하나씩 더 붙여야 해서, 자주 막히는 질문 6개를 직접 돌려 보면서 답을 달아 봤어요.

테스트 환경: macOS 26.6.2, bsdtar 3.5.3 (libarchive 3.7.4), zsh 5.9. 리눅스 GNU tar 와 다른 부분은 GNU tar 공식 매뉴얼을 확인해서 따로 적었어요.

실험용으로 project 폴더 안에 src/app.js, README.md, logs/app.log, node_modules/lib/index.js 를 만들어 두고 시작했습니다.

Q1. tar.gz 압축 풀기 명령어와 옵션 뜻이 뭔가요

풀 때는 x, 만들 때는 c 만 바뀌고 나머지는 거의 같아요.

옵션 뜻 언제 쓰나
x 풀기(extract) 압축 해제
c 만들기(create) 압축할 때
t 목록 보기 풀기 전에 안을 확인할 때
z gzip 처리 .tar.gz, .tgz 파일
v 진행 상황 출력 생략해도 결과는 같음
f 파일 이름 지정 항상 마지막에, 바로 뒤에 파일명

f 바로 뒤에는 파일 이름이 와야 해서 -xzfv 처럼 f 를 중간에 넣으면 v 를 파일명으로 읽어 버려요. f 는 맨 끝에 두는 습관을 들이면 편합니다.

그리고 풀 때는 z 를 빼도 돼요. 같은 파일을 tar -xvf 로 풀어 봐도 그대로 풀렸고, GNU tar 매뉴얼에도 압축 파일을 읽을 때는 형식을 자동으로 알아낸다고 나와 있어요. 파이프로 넘겨 받을 때만 예외입니다.

$ tar -xvf project.tar.gz -C auto
x project/
x project/node_modules/
x project/README.md
x project/logs/
x project/src/
x project/src/app.js
x project/logs/app.log
x project/node_modules/lib/
x project/node_modules/lib/index.js

Q2. 압축을 풀기 전에 안에 뭐가 들었는지만 볼 수 있나요

x 대신 t 를 쓰면 풀지 않고 목록만 보여 줘요. 남이 준 파일은 이걸 먼저 보는 게 안전해요. 첫 줄이 폴더 하나(project/)로 시작하는지, 파일이 바로 흩어져 있는지에 따라 풀 위치를 정하면 됩니다.

$ tar -tzf project.tar.gz
project/
project/node_modules/
project/README.md
project/logs/
project/src/
project/src/app.js
project/logs/app.log
project/node_modules/lib/
project/node_modules/lib/index.js

Q3. 지금 폴더 말고 다른 폴더에 풀려면요

대문자 -C 뒤에 폴더를 적어요. 여기서 많이 헷갈리는 게, 그 폴더가 미리 있어야 한다는 점이에요. 없는 폴더를 적으면 아무것도 안 풀리고 오류만 나요.

$ tar -xzf project.tar.gz -C backup
tar: could not chdir to 'backup'

$ mkdir backup && tar -xzvf project.tar.gz -C backup
x project/
x project/node_modules/
x project/README.md
x project/logs/
x project/src/
x project/src/app.js
x project/logs/app.log
x project/node_modules/lib/
x project/node_modules/lib/index.js

mkdir 로 폴더를 만들고 나서 다시 실행하니 backup/project 아래로 들어갔어요.

Q4. 풀었더니 폴더가 한 겹 더 생겨요

압축 파일 안에 이미 project/ 라는 최상위 폴더가 들어 있어서 그래요. backup 안에 바로 내용물만 꺼내고 싶다면 --strip-components=1 로 맨 앞 경로 한 단계를 떼어 내면 됩니다.

$ tar -xzf project.tar.gz -C strip --strip-components=1
$ ls strip
README.md
logs
node_modules
src

숫자는 떼어 낼 단계 수라서, 2를 주면 두 단계를 지워요. 이 옵션은 GNU tar 에도 같은 이름으로 있어요.

Q5. 폴더를 tar.gz 로 압축하는데 node_modules 랑 로그는 빼고 싶어요

c 로 만들고, 빼고 싶은 건 --exclude 로 하나씩 적어요. 와일드카드가 들어가면 작은따옴표로 감싸야 셸이 먼저 바꿔 버리지 않아요.

$ tar -czvf light.tar.gz --exclude='node_modules' --exclude='*.log' project
a project
a project/README.md
a project/logs
a project/src
a project/src/app.js
$ ls -l project.tar.gz light.tar.gz
793 light.tar.gz
1116 project.tar.gz

node_modules 폴더 통째와 app.log 가 빠졌고, logs 폴더 자체는 빈 채로 남았어요. 실험 파일이 작아서 차이가 크지 않지만, 실제 프로젝트에서는 node_modules 하나 빼는 것만으로 크기가 확 줄어요.

참고로 위 출력 앞의 a, x 글자는 맥 bsdtar 가 붙이는 표시라서 리눅스에서는 출력 모양이 조금 다를 수 있어요. 옵션은 똑같이 써도 됩니다.

Q6. 수십 개 파일 중에 하나만 꺼낼 수 있나요

맨 뒤에 꺼낼 파일 경로를 적으면 돼요. 이때 경로는 Q2 목록에 나온 그대로 써야 해요. 파일 이름만 적으면 못 찾아요.

$ tar -xzvf project.tar.gz -C one project/src/app.js
x project/src/app.js
$ tar -xzf project.tar.gz -C one app.js
tar: app.js: Not found in archive
tar: Error exit delayed from previous errors.

Not found in archive 가 나오면 먼저 -tzf 로 목록을 보고 경로를 복사해 붙이는 게 제일 빨라요.

마지막으로 하나 더

tar 는 같은 이름의 파일이 있으면 기본적으로 덮어써요. README.md 내용을 바꿔 둔 뒤 같은 압축을 다시 풀어 보니 원래 내용으로 돌아가 있었어요. 이미 있는 파일을 지키고 싶으면 -k 를 붙이면 되고, 운영 서버에서 설정 파일이 들어 있는 압축을 풀 때는 빈 폴더에 -C 로 먼저 풀어 보고, 확인한 다음 옮기는 쪽이 안전합니다.

관련 글: linux tomcat 설치방법 정리

관련 글: linux find 명령어 사용방법 ( linux find )

출처: macOS 26.6.2 터미널 직접 실행(2026년 10월 19일), GNU tar 매뉴얼 "Creating and Reading Compressed Archives", man tar(bsdtar 3.5.3)

댓글