압축·아카이브·검색 (tar·gzip·find)
3. 코드 예제
예제 1: tar 기본 — 01_archive.sh 발췌
tar czf app.tgz app
tar tzf app.tgz | head -n 4
mkdir out && tar xzf app.tgz -C out
tar czf conf-only.tgz -C app conf
tar tzf conf-only.tgz
tar czf app-nolog.tgz --exclude='*.log' app
tar tzf app-nolog.tgz | grep -c logapp/
app/bin/
app/conf/
app/conf/app.properties
conf/
conf/app.properties
1-C app conf 로 만든 것은 목록이 conf/ 로 시작합니다. --exclude 뒤 grep -c log 가 1 인 것은 logs/ 폴더 이름만 남고 .log 파일은 빠졌기 때문입니다.
예제 2: 압축 비교 — 01_archive.sh 발췌
ls -l app.tgz | awk '{print "tgz:", $5, "bytes"}'
cp app/logs/big.log big.copy
gzip big.copy && ls -l big.copy.gz | awk '{print "gz:", $5, "bytes"}'
gzip -k big.copy && ls big.copy big.copy.gz
zcat big.copy.gz | wc -ctgz: 651 bytes
gz: 335 bytes
big.copy big.copy.gz (-k 원본 유지)
300000300KB 의 반복 문자가 335 바이트로 줄었습니다. 로그처럼 반복이 많은 텍스트는 압축률이 매우 높습니다. zcat | wc -c 가 원래 크기 300000 을 돌려줍니다.
예제 3: 검색 조합 — 01_archive.sh 발췌
grep -rn 'ERROR' app/logs | head -n 2
grep -rl 'server.port' app
grep -r --include='*.log' -c ERROR app
find app -name '*.log' -size +100k
find app -type f -exec grep -l 'fail 2' {} +
zgrep -c ERROR app/logs/app.1.log.gzapp/logs/app.1.log:2:ERROR fail 1
app/logs/app.2.log:2:ERROR fail 2
app/conf/app.properties
app/logs/app.1.log:1
app/logs/app.2.log:1
app/logs/app.3.log:1
app/logs/big.log:0
app/logs/big.log
app/logs/app.2.log
1같은 폴더를 내용·이름·크기로 각각 찾았습니다. zgrep 은 압축 파일에서도 같은 결과를 줍니다.
예제 4: 체크섬과 분할 — 01_archive.sh 발췌
sha256sum app.tgz > app.tgz.sha256 && sha256sum -c app.tgz.sha256
split -b 100k app/logs/big.log part_
ls part_* | wc -l
cat part_* > big.joined && cmp big.joined app/logs/big.log && echo "합친 것 일치"app.tgz: OK
3
합친 것 일치300KB 를 100KB 세 조각으로 나눴다 합쳐 원본과 같음을 cmp 로 확인했습니다.