본문으로 바로가기
TaeyoungKim.dev

리눅스 gzip 폴더 압축 오류: tar.gz로 묶고 압축하는 방법

리눅스작성 약 3분 읽기TaeyoungKim
LinkedInX

gzip project를 입력했더니 압축 파일 대신 is a directory 오류가 나온다. 폴더가 너무 커서 거절한 것도, 권한이 부족한 것도 아니다. 여러 파일과 폴더 구조를 하나로 묶는 일이 먼저 빠졌기 때문이다.

gzip에 폴더를 넣으면 왜 오류가 날까?

gzip은 파일의 데이터를 압축해 .gz로 만드는 도구다. 디렉터리 안의 파일과 하위 폴더를 하나의 결과물로 묶는 아카이브 역할은 하지 않는다. 그래서 폴더 하나를 project.gz로 만들려는 아래 명령은 실패한다.

bash
lab_dir=$(mktemp -d)
mkdir -p "$lab_dir/site/config" "$lab_dir/restored"
printf 'port: 8080\n' > "$lab_dir/site/config/app.yml"
printf 'INFO ready\n' > "$lab_dir/site/app.log"

gzip "$lab_dir/site"
text
gzip: .../site is a directory

일부 gzip 구현은 디렉터리를 재귀적으로 방문하는 옵션을 제공하지만, 그 경우에도 여러 파일을 하나의 아카이브로 만드는 것과는 다르다. 폴더 구조를 한 파일로 옮기고 싶다면 tar가 먼저 필요하다.

tar.gz 파일은 어떻게 만들까?

tar는 파일과 디렉터리를 하나의 아카이브로 묶는다. 여기에 -z를 더하면 gzip 압축까지 한 번에 처리한다.

bash
tar -czf "$lab_dir/site.tar.gz" -C "$lab_dir" site

옵션은 이름보다 역할로 기억하면 덜 헷갈린다.

옵션역할
-c새 아카이브를 만든다
-zgzip 압축을 적용한다
-f바로 다음 값을 결과 파일명으로 사용한다
-C지정한 디렉터리에서 시작한 것처럼 항목을 담는다

-C "$lab_dir" site 덕분에 임시 경로 전체가 아니라 site/부터 저장된다. 다른 컴퓨터에 풀었는데 내 컴퓨터의 긴 경로가 따라오는 일을 피할 수 있다. 절대 경로를 그대로 보관하는 것보다 이동과 복원이 편하다.

압축을 풀기 전에 무엇을 확인할까?

바로 풀기 전에 -t로 목록을 본다. 압축 파일은 선물 상자와 비슷하다. 포장은 멀쩡해도 안에 무엇이 들었는지는 열기 전에 확인하는 편이 마음이 편하다.

bash
tar -tzf "$lab_dir/site.tar.gz"
text
site/
site/config/
site/app.log
site/config/app.yml

원하는 site/ 아래에 두 파일이 있고 예상 밖의 절대 경로가 없다. 이제 현재 작업 폴더에 곧바로 풀지 않고, 비어 있는 restored에 복원한다.

bash
tar -xzf "$lab_dir/site.tar.gz" -C "$lab_dir/restored"

여기서 -x는 추출을 뜻한다. 압축 해제 명령 자체가 성공했다고 파일 내용까지 같은 것은 아니므로, 중요한 백업이라면 원본과 비교한다.

bash
cmp "$lab_dir/site/app.log" "$lab_dir/restored/site/app.log"
cmp "$lab_dir/site/config/app.yml" "$lab_dir/restored/site/config/app.yml"

두 명령이 아무것도 출력하지 않고 상태 0으로 끝나면 이 예제의 파일 바이트가 같다. 권한, 소유자, 링크 같은 모든 복원 조건까지 검증됐다는 뜻은 아니다. 백업 목적이라면 필요한 메타데이터와 실제 복구 절차도 따로 시험해야 한다.

tar와 gzip을 언제 따로 쓸까?

로그 파일 하나의 크기만 줄이려면 gzip app.log가 간단하다. 여러 파일과 폴더 구조를 한 결과물로 전달하거나 보관하려면 tar -czf site.tar.gz site가 맞다. 이름이 비슷해 보여도 선택 기준은 하나다. 한 파일을 압축하는가, 여러 항목을 구조째 묶는가?

외부에서 받은 아카이브는 tar -tzf로 이름을 먼저 확인하고 빈 디렉터리에 푼다. 기존 프로젝트 폴더에서 바로 추출하면 같은 이름의 파일을 덮거나 예상하지 못한 위치에 항목이 생겼을 때 확인하기 어렵다.

핵심 요약

gzip은 데이터를 압축하지만 폴더 구조를 하나의 아카이브로 묶지 않는다. 디렉터리는 tar -czf로 묶고 압축하며, tar -tzf로 목록을 확인한 뒤 tar -xzf ... -C 별도폴더로 복원하자. 중요한 파일은 압축 해제 성공만 믿지 말고 cmp 같은 비교로 실제 내용을 확인한다.

작성자

TaeyoungKim

기초 개념을 구현과 검증, 실제 운영 판단까지 연결해 기록합니다.

#Linux#gzip 폴더 압축#tar.gz#tar 명령어#압축 해제

함께 읽으면 좋은 글