tar 배포본 압축할때 새로운 디렉토리로 해제되게 하는 방법에 관한 질문입니다.
글쓴이: kimyh / 작성시간: 목, 2006/11/02 - 11:08오후
조그만 클라이언트 소켓 프로그램을 만들어 tar로 압축하여 배포본으로 사용할려고 합니다.
tar 배포본에서 다운로드받아 해제할 경우 같은 tar화일이 있을때 작업 오류발생을 막기위해
현재의 디렉토리 아래에 tar파일명의 디렉토리를 만들어 그곳에 풀리게 하는것으로 알고 있습니다.
그런데 관련문서를 보니 자세한 설명없이 아래와 같이만 하면 된다는데 무슨 말인지 잘 이해가 않가는군요.
검색해서 찾아봐도 별로 관련내용이 보이지를 않고요.
또 tar --help 해서 옵션을 찾아봐도 내용에 맞는 옵션도 보이지를 않고요.
[인용] 여기 makefile 트릭(trick)이 있다. `foobar'라는 배포본의 디렉토리를 가지고 있으며 SRC가 배포본의 파일 리스트를 포함하고 있다고 가정하면 다음과 같이 하면 된다. foobar-$(VERS).tar.gz: @ls $(SRC) | sed s:^:foobar-$(VERS)/: >MANIFEST @(cd ..; ln -s foobar foobar-$(VERS)) (cd ..; tar -czvf foobar/foobar-$(VERS).tar.gz `cat foobar/MANIFEST`) @(cd ..; rm foobar-$(VERS))
실제로 콘솔에서 압축을 할경우
tar cfzp [압축파일명] [대상파일명]
이런식으로 하는것 아닌가요.
위의 스크립트를 어떻게 사용하는지 알려주시면 감사하겠습니다.
아니면 위의 스크립트 이용하지않고 간단한 tar압축 명령어가 있는지도 알고 싶군요.
Forums:
foobar-$(VERS).tar.gz: @ls
foobar-$(VERS).tar.gz:
@ls $(SRC) | sed s:^:foobar-$(VERS)/: >MANIFEST
$SRC 디렉토리의 파일들의 목록을 만들고 각 파일이름 앞에 'foobar-0.1/'을 덧붙여 MANIFEST 파일에 기록합니다.($VERS를 0.1로 가정합니다.)
@(cd ..; ln -s foobar foobar-$(VERS))
현재 디렉토리에서 한 단계 위로 올라가서 foobar를 가리키는 foobar-0.1 링크를 만듭니다.
(cd ..; tar -czvf foobar/foobar-$(VERS).tar.gz `cat foobar/MANIFEST`)
현재 디렉토리에서 한 단계 위로 올라가서 foobar디렉토리 아래에 foobar-0.1.tar.gz 파일을 생성합니다. 압축될 파일 목록은 앞서 만든 MANIFEST 파일에서 얻습니다.
@(cd ..; rm foobar-$(VERS))
2단계에서 만든 링크를 지웁니다.
makefile 규칙은 제가 잘 몰라서 @의 의미는 모르겠네요.
제 생각에 이건 makefile이 foobar 디렉토리 아래에 위치하기 때문에 사용하는 방법이라고 생각이 되네요. VERS 변수에 따라 압축할 폴더의 이름을 유동적으로 바꾸기 위해서이기도 하구요. $SRC에 디렉토리에 있는 파일들만 골라서 동적으로 버전 번호를 붙인후 타르볼을 생성하기 위한 스크립트라고 보여집니다.
괄호로 닫은 부분은 새로운 프로세스로 쉘을 실행하고 그 내부에서 실행 됩니다. 현재 문맥에 영향을 주지 않죠. cd .. 이 들어가기 때문에 처리해준 것 같습니다. 쉘에서 (cd .. ; ls) 해보시면 어떤 얘긴지 아실수 있습니다.
중간에 ; 세미콜론은 두줄에 쓸 명령을 한줄에 쓸 때 사용합니다. 엔터 쳤다고 생각하시면 되죠.
--
마잇
--
마잇
답변 주신분 감사드립니다.
바쁘신중에도 자상한 답변 주신데 감사드립니다.
아래와 같은 방법으로 해결했습니다.
압축 대상화일을 아래와같이 현재의 디렉토리아래 프로그램의 버전넘버 아래에 풀리게 하기위해서는 버전넘버의 디렉토리를
만든후 그아래에 화일을 넣고 디렉토리까지 묶어 압축을 하면 되더군요.
tar cfzp aaa.tar(압축화일명) program_no_01/file00.c program_no_01/file01.c program_no_01/file02.c
처럼 해주면 어느디렉토리에서 압축을 해제하나 현재의 디렉토리밑에 program_01디렉토리가 생겨 그 아래에 압축이 풀리더군요.
다시한번 답변주신데 대하여 감사드립니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
tar cvzf
tar cvzf program_no_01.tar.gz program_no_01
이렇게만 하셔도 됩니다. 아래에 있는 것들 전부 같이 묶입니다.
제가 질문의 요지를 좀 다르게 파악했군요. 단순한 것을 원하신 것이었는데.
올려주신 makefile의 내용은 지금 하셨던 작업을 매 버전 릴리즈마다 반복적으로 해야 할때 자동화를 위한 것이라 생각하시면 되겠네요.
불특정한 대상으로 배포하실 예정이면 p 옵션은 빼는게 좋지 않을까요? 각 사용자 권한으로 풀리게 놔두는게 좋을 거라는 생각이 듭니다.
--
마잇
--
마잇
감사합니다. 그렇게 간단한 방법이 있었군요.
정말 감사합니다.
저는 어떻게 디렉토리내에 있는 모든화일들을 한번에 묶을수 있나
한참을 고민해도 답이 나오지 않더구요.
좋은 답변 정말 감사합니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
댓글 달기