tar 使用不同名称的文件

dot*_*hen 4 tar filenames

为了使我的环境可部署,我偶尔会压缩一些方便的文件和脚本:

tar -czvf env.tgz .vimrc .vim/ bin/lsl bin/s
Run Code Online (Sandbox Code Playgroud)

我想添加.bashrc到组合中,但我有一些敏感信息,所以我维护.bashrc-deploy这些信息,然后一旦 tarball 在新服务器上,我就可以简单地重命名。但是,我真的希望.bashrc从一开始就让 tarball 具有正确的名称,这样我就不必重命名。我考虑编写一个脚本来临时重命名文件并制作 tarball,如下所示:

#!/bin/bash
mv .bashrc .bashrc-real
mv .bashrc-deploy .bashrc
tar -czvf env.tgz .bashrc .vimrc .vim/ bin/lsl bin/s
mv .bashrc .bashrc-deploy
mv .bashrc-real .bashrc
Run Code Online (Sandbox Code Playgroud)

但是,是否tar有任何内部方式someFile将名称存储anotherName在 tarball 中?

Sté*_*las 5

使用pax(创建tar档案的标准(POSIX)命令)并bsdtar查看-s选项:

pax -s '/\.bashrc-deploy/.bashrc/' -w -x ustar . | gzip > a.tar.gz

bsdtar -s '/\.bashrc-deploy/.bashrc/' -zcf a.tar.gz .
Run Code Online (Sandbox Code Playgroud)

但是请注意,上述内容将替换要添加到存档中的任何成员的任何文件路径中的.bashrc-deploy字符串.bashrc。如果只想替换./.bashrc-deploy当前目录中的 ,则必须编写它:

pax -s '|^\./\.bashrc-deploy$|./.bashrc|' -w -x ustar .
Run Code Online (Sandbox Code Playgroud)

(虽然通过阅读 POSIX pax 规范,我不确定它是否保证在每个 pax 实现中都能这样工作。它应该与 bsdtar 一起工作,因为只有一个实现)。