tar:如何创建具有任意前导目录的 tar 文件,而无需“cd”到父目录

Yan*_*Yan 26 compression tar

假设我有一个文件目录

/home/user1/dir1
Run Code Online (Sandbox Code Playgroud)

我想创建一个只有“dir1”作为前导目录的tar:

/dir1/file1
/dir1/file2
Run Code Online (Sandbox Code Playgroud)

我知道我可以先 cd 到目录

cd /home/user1/
tar czvf dir1.tar.gz dir1
Run Code Online (Sandbox Code Playgroud)

但是在编写脚本时,从一个目录跳转到另一个目录并不总是有利的。我想知道有没有办法在不更改当前目录的情况下使用绝对路径?

我知道我总是可以在 INSIDE 中创建一个带有绝对路径的 tar 文件并使用

--strip-components 
Run Code Online (Sandbox Code Playgroud)

提取时,但有时额外的路径名是您不想与 tar 文件一起分发的额外私人信息。

谢谢!

Chr*_*uet 26

使用 gnu tar,您可以使用与实际不同的基本目录创建存档:

tar -c --transform 's,^\.,mybasedir,' .
Run Code Online (Sandbox Code Playgroud)

只需根据您的需要调整 sed 表达式即可。


Phi*_*lds 25

tar -C 改变目录

tar -C /home/user1/ -cvzf dir1.tar.gz dir1
Run Code Online (Sandbox Code Playgroud)

顺便说一句,用于跟踪更改目录的方便...使用pushd和popd。

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd
Run Code Online (Sandbox Code Playgroud)

  • 不起作用:tar:dir:无法统计:没有这样的文件或目录(假设 dir1 在 /home/user1/ 下) (2认同)

Yan*_*Yan 5

好的,我也发现了

tar -czvf file1.tar.gz /home/user1/dir1/../dir1
Run Code Online (Sandbox Code Playgroud)

也按照我想要的方式工作。