linux

tar 압축 특정파일(디렉토리)만 빼고

하나에하나 2010. 11. 17. 14:55

#tar cvf filename.tar [압축하고자하는 폴더] --exclude [빼고자 하는 폴더 이름]

#tar cvf compress_image.tar image --exclude .svn

 

2개 이상의 파일(디렉토리일때)

tar cvfz filename.tgz --exclude=file2 --exclude=dir2


 

-X, --exclude-from=FILE exclude patterns listed in FILE

파일에 따로 목록을 적어두고 -X 옵션으로 그 파일을 지정하셔도 됩니다.

이 옵션을 사용하다 발견한 점은 패턴을 적어주실때 디렉토리의 경우 끝에 /를 붙여주면 원하는대로 동작하지 않습니다.

$ tar cvjf bak.tbz2 --exclude=dir2 *

이렇게 하면 현재 디렉토리에서 dir2디렉토리를 제외하고 묶어지는데

$ tar cvjf bak.tbz2 --exclude=dir2/ *

끝에 / 를 붙여주시면 안됩니다.
파일로 작성해서 사용하실때도 마찬가지이구요.

현재 디렉토리의 모든 파일을 지정할떄는 보통 * 와일드카드 문자로 가능하지만 히든파일까지 포함 시키려고 하니 간단한 방법이 안떠오르더군요. 그래서 ls 와 묶어서 사용합니다.

ls -1A | tar cvjf bak.tbz2 -X exclude -T -

1은 한줄에 파일 하나 출력, A는 a와 같지만 . , .. 를 제외합니다.
-T는 묶을 목록을 파일에서 받기 - 는 표준 입력입니다.

다양한 방법이 있을겁니다. ls 없이 tar만으로 하는 방법을 저도 알고 싶네요.