tar를 사용하여 릴리스 버전 만들기

tar를 사용하여 릴리스 버전 만들기

저는 일반적인 내용(소스 코드, yadda, yadda)이 포함된 프로젝트를 가지고 있으며 다음을 수행하는 Scons 명령을 원합니다(하지만 솔직히 어떤 빌드 시스템이라도 가능합니다).

  1. 시스템 구축 - 쉽습니다.
  2. 시스템의 타르볼을 생성하세요 - 쉽습니다.
  3. 타르 볼의 내용이 추출되면 디렉토리로 추출됩니다. fubar-VERSION/이것이 까다로운 부분입니다.

후자는 심볼릭 링크를 생성한 다음 tar프로젝트 위의 디렉터리에서 ing하여 수동으로 수행할 수 있지만 그다지 우아하게 느껴지지는 않습니다. 어떤 아이디어가 있나요?

명확히 하기 위해 다음과 같이 할 수 있기를 바랍니다.

; pwd
~/project
; scons release
[...]
; cp project-X.Y.Z.tbz /tmp
; cd /tmp
; tar jxvf project-X.Y.Z.tbz
./project-X.Y.Z/[...]

따라서 아카이브는 올바른 버전 번호를 가진 프로젝트 이름을 딴 디렉터리에 추출됩니다.

답변1

GNU tar 사용:

tar cjf ../fubar-4.2.tar.bz2 --transform='s/^\./fubar-4.2/' --exclude='*.o' .

전통적인 tar 구현은 이를 수행할 수 없습니다. 내가 아는 한, FreeBSD tar에도 비슷한 기능이 없습니다.

그리고공원, cpio 및 tar에 대한 POSIX 대체:

pax -w -s '/^\./fubar-4.2/' -s '/\.o$//' . | bzip2 >../fubar-4.2.tar.bz2

pax현재 POSIX/Single Unix 표준에서는 필수이지만 많은 Linux 배포판에서는 기본적으로 이를 설치하지 않습니다 . GNU tar와 pax를 모두 지원하면 내장되지 않은 거의 모든 unice를 다룰 수 있습니다.

답변2

적어도 주어진 기본 정규식 패턴을 기반으로 파일 또는 아카이브 멤버 이름을 수정하는 옵션이 bsdtar 2.8.4있습니다 .-s pattern

# using '^\.' as pattern
bsdtar -czvf test.tar.gz .
bsdtar -tzvf test.tar.gz
bsdtar -s '|^\.|archive-X.Y.Z|' -xzvf test.tar.gz

# using '^[^/]*' as pattern
bsdtar -C .. -czvf test.tar.gz "$(basename "$(pwd -P)")"
bsdtar -tzvf test.tar.gz
bsdtar -s '|^[^/]*|archive-X.Y.Z|' -xzvf test.tar.gz

관련 정보