我有一个包含常用内容(源代码、yadda、yadda)的项目,并且我想对 Scons 发出一个命令(但老实说,它可以是任何构建系统),它将执行以下操作:
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)
因此,档案提取到以具有正确版本号的项目命名的目录中。
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。