在 tar 中添加前缀

Rob*_*y75 20 bash tar

我目前在 shellscript 中效率很低:

cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION
Run Code Online (Sandbox Code Playgroud)

我希望所有内容都包含在名为 $VERSION 的目录中 - 有没有办法做到这一点而不必像上述脚本那样复制所有内容?

小智 31

GNU 版本tar支持该--transform选项(及其别名--xform),您可以像这样使用它

tar --transform "s/^$MYPATH/$VERSION/" -cf archive.tar.bz2 "$MYPATH"
Run Code Online (Sandbox Code Playgroud)

例如,给定这个目录树

foo
??? foo.txt
Run Code Online (Sandbox Code Playgroud)

命令

tar --transform "s/^foo/bar/" -cf foo.tar.bz2 foo
Run Code Online (Sandbox Code Playgroud)

将产生一个像

$ tar -tf foo.tar.bz2
bar/
bar/foo.txt
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,这种方法可能会破坏符号链接。前置 `flags=r;` 解决了 /sf/answers/2076324841/ 中提到的问题。 (3认同)

小智 16

要压缩当前目录并添加前缀,这对我有用:

tar --transform 's,^\.,$VERSION,' -cf foo.tar .
Run Code Online (Sandbox Code Playgroud)