如果我使用以下命令:
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...