为了使我的环境可部署,我偶尔会压缩一些方便的文件和脚本:
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 中?
使用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 一起工作,因为只有一个实现)。