tar는 여러 파일과 디렉터리를 한 파일로 묶는다. 압축은 gzip, xz, bzip2가 맡는다. GNU tar는 묶기와 압축을 한 명령으로 한다. `tar --version`으로 확인할 수 있다.

묶고 풀고 목록 보기

Bash
tar -czf backup.tar.gz project
tar -tzf backup.tar.gz
tar -xzf backup.tar.gz
tar -xzf backup.tar.gz -C /tmp/restore

`-c`는 만들기, `-x`는 풀기, `-t`는 목록이다. `-z`는 gzip, `-J`는 xz, `-j`는 bzip2다. `-f` 바로 뒤에 묶음 파일 이름이 와야 한다. `-v`는 처리하는 이름을 출력한다. `-C`는 그 디렉터리로 이동한 뒤 작업한다.

받은 파일은 풀기 전에 목록을 본다. 절대 경로나 `..`가 들어 있으면 의도한 폴더 밖에 파일이 풀릴 수 있다.

Bash
tar -tzf backup.tar.gz | head

묶음 안의 일부만 풀 때는 이름을 뒤에 적는다. 이름은 `tar -tzf`에 나온 그대로다.

Bash
tar -xzf backup.tar.gz project/README

gzip, xz, zip

gzip은 파일 하나를 압축한다. `-k`가 없으면 원본을 지우고 `.gz`를 남긴다.

Bash
gzip -k file.txt
gzip -d file.txt.gz
gunzip file.txt.gz
zcat file.txt.gz | head

xz도 같은 꼴이다. `xz -k`, `xz -d`, `xzcat`를 쓴다. tar와 같이 쓸 때는 `.tar.xz`와 `tar -J`가 대응한다.

zip은 윈도우와 파일을 주고받을 때 쓰기 쉽다. 디렉터리는 `-r`이 필요하다. 풀기 전에 `unzip -l`로 목록을 본다.

Bash
zip -r bundle.zip dir
unzip -l bundle.zip
unzip bundle.zip -d /tmp/out

이미 있는 파일을 덮을지 물을 때는 unzip이 물어본다. 확인 없이 최신 파일만 덮으려면 매뉴얼의 `-o`와 `-n`을 구분해서 쓴다. 대상 디렉터리를 `-d`로 지정하면 현재 디렉터리에 흩어지는 일을 막을 수 있다.