使用 tar 创建发布版本

Sar*_*use 2 tar

我有一个包含常用内容(源代码、yadda、yadda)的项目,并且我想对 Scons 发出一个命令(但老实说,它可以是任何构建系统),它将执行以下操作:

  1. 构建系统——这很容易。
  2. 创建系统的焦油球——这很容易。
  3. 当解压缩 tar 球的内容时,它们会解压缩到一个fubar-VERSION/目录中——这是棘手的部分。

我可以通过创建一个符号链接tar来手动完成后者,然后从项目上方的一个目录中进行操作,但这感觉不雅。任何的想法?

为了澄清,我希望能够做到这一点:

; pwd
~/project
; scons release
[...]
; cp project-X.Y.Z.tbz /tmp
; cd /tmp
; tar jxvf project-X.Y.Z.tbz
./project-X.Y.Z/[...]
Run Code Online (Sandbox Code Playgroud)

因此,档案提取到以具有正确版本号的项目命名的目录中。

Gil*_*il' 5

With GNU tar:

tar cjf ../fubar-4.2.tar.bz2 --transform='s/^\./fubar-4.2/' --exclude='*.o' .
Run Code Online (Sandbox Code Playgroud)

Traditional tar implementations have no way to do this. Even FreeBSD tar has no similar feature that I know of.

使用pax,cpio 和 tar 的 POSIX 替代品:

pax -w -s '/^\./fubar-4.2/' -s '/\.o$//' . | bzip2 >../fubar-4.2.tar.bz2
Run Code Online (Sandbox Code Playgroud)

尽管pax在当前的 POSIX/Single Unix 标准中是强制性的,但许多 Linux 发行版默认不安装它。如果您同时支持 GNU tar 和 pax,您将涵盖几乎所有的非嵌入式 unice。