Linux 에서 여러개의 파일 각각 압축하기.
Developer 2009/12/03 09:27find . -name <regexp> -exec tar -jcvf {}.tar.bz2 {} \;
로 해결된다.
반대로 압축 풀때는
find . -name <regexp> -exec tar -jxvf {} \;
로 된다.
이전 글.
리눅스에서 작업하다보면 몇 가지, 자주 없을 것 같지만, 의외로 자주 발생하는 상황들이 있는데, 그 중에서 하나가 여러개의 파일들을 각자 압축해야 하는 상황이다.
예를들어서 텍스트 파일들 A.txt 부터 Z.txt까지가 있고, 각각의 파일들을 압축해야 하는 경우가 있다. 이 경우에, 내가 알기로는 마땅히 방법이 없고, tar -jcvf (또는 -zcvf)로 각각의 파일을 압축하는 수 밖에 없다. 즉, 26번을 기다렸다가 해야한다.
파일들의 크기가 작으면 상관없지만, 파일당 압축하는데 몇십초 이상 걸리기 시작하면 이미 귀찮아지고, 뭔가 자동화된 툴을 찾게된다.
그래서 아래 셸 스크립트를 작성해보았다. 초기 버젼이라 뭔가 안되는 것도 많을 것 같지만, 나름 괜찮아 보인다. ㅋㅋ
이름은 cbtar.sh (create bzip tar)
사용 방법은 간단하다.
cbtar.sh *.txt
현재 디렉토리 안의 모든 txt파일들을 각각 압축한다.
2009.12.09 업그레이드:
`basename $1`.tar.bz2를 추가해서 현재 디렉토리에 tar파일이 생성되게 한다.
#!/bin/bash
# This script creates tar.bz2 files for each given file name
# Author: MyungHyun Lee (Kent) 2009.12.03
# thicliwin@gmail.com
# for each directory (with the maxdepth)
echo "Number of compressed files to create: $#"
if [ $# -ge 1 ]
then
#files = $*
while [ "$*" != "" ]
do
echo "Running... tar -jcvf `basename $1`.tar.bz2 $1"
tar -jcvf `basename $1`.tar.bz2 $1
shift
done
else
echo "Usage: cbtar.sh "
exit
fi#eof
