`焦油C| tar x` 将文件写入意外路径

`焦油C| tar x` 将文件写入意外路径

如果我使用以下命令:

cd /Users/you/foo 
tar c /Users/you/x/y/z | tar x

它将写入/Users/you/x/y/z本地目录到此路径:

/Users/you/foo/Users/you/x/y/z

如何更改 tar 命令之一,以便将文件写入此处:

/Users/you/foo/z

我的 MacOS 机器上的 man tar 没有对此问题产生任何明显的解决方案,并且我不确定是否可以改变这种行为。

答案1

当我复制东西时我会做的是:

tar c here/is/the/stuff | (cd /where/it/should/go; tar x)

说明:第一个tar包到标准输出,通过管道传输到第二个命令,该命令是一个子 shell(启动(它),它更改目录,然后运行第二个tar.如果您想使用例如文件补全功能来处理混乱的名称,这很好。或者您可以-C在执行操作之前使用更改目录的选项,例如:

tar c here/is/the/stuff | tar -C /where/it/should/go -x

答案2

我想我使用 -O 选项来实现这一点,tar x该选项允许您将输出写入标准输出,因此看起来像:

tar c /Users/you/x/y/z | tar x -O > z.tgz

这种技术的一个问题是它似乎不支持写出多个文件:

tar c z1 z2 z3 | tar x -O > z.tgz

看起来 z.tgz 只代表 z3...

相关内容