我正在编写一个 bash 脚本,将我的应用程序打包成一个 TAR 文件。这些文件在磁盘上的排列方式与它们在 TAR 文件中的排列方式不同,因此我决定使用 --transform 选项。
但是,--transform 命令似乎是全局应用的,而不是应用于之后包含的文件。
例子:
tar \
--exclude='webmanager/bin/dev' \
--exclude='webmanager/.config.ini' \
--show-transformed-names \
--create --gzip --verbose \
--file 'output.tgz' \
-C '../../../' \
'include' \
'resources' \
'webmanager' \
'rootconfig.php' \
-C 'webmanager/bin/dev' \
'index.php' \
'README.md' \
--transform='s|^|webmanager/|r' \
'.config.ini'
基本上,此代码从中获取文件webmanager/bin/dev/.config.ini
并将其放置webmanager/.config.ini
在 TAR 文件中。但我只希望转换 .config.ini 文件。目前所有内容都正在转换并以 为前缀webmanager/
。我希望此命令的行为类似于-C
(更改当前目录) - 它仅影响其后的输入。
我查看了 TAR 手册页,但还是不知道该如何正确执行此操作。请帮忙!
答案1
看来这个--transform
选项确实适用于所有文件。顺便说一句,我发现了这个页关于tar
(手册页第 6.8 节:仅对新文件进行操作)可能会对您有所帮助。
如果可以的话,我建议你采用不同的方法:将你需要的文件放在临时目录中(cp
命令就可以了),用 修改 .config.in,sed
然后使用tar
打包所有内容。如果你熟悉 ,你可以创建一个甚至 Makefile 脚本make
。