![使用 tar 归档时将 pwd 中的所有内容移动/转换到子目录中](https://linux22.com/image/133483/%E4%BD%BF%E7%94%A8%20tar%20%E5%BD%92%E6%A1%A3%E6%97%B6%E5%B0%86%20pwd%20%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%E7%A7%BB%E5%8A%A8%2F%E8%BD%AC%E6%8D%A2%E5%88%B0%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AD.png)
我在 MacOS 机器上(我认为 tar 命令是 BSD)。从我读到的-s
BSD tar 上的开关与 GNU tar 上的开关是一样的--transform
。
我有这个命令:
tar -zcf foo.tgz -s /^"$(pwd)"/"$(pwd)/package"/ "$(pwd)"
我想做的是将所有内容存档到名为 foo.tgz 的文件中,并将所有内容放入名为“package”的子目录中。
我收到此错误:
tar:无效的替换标志 a
我相信 -s 选项过去的内容不正确,但不确定它可能是什么。
最终,我希望将输出写入 stdout,而不是写入名为 foo.tgz 的文件,所以如果您也想更新它,请这样做,谢谢。
答案1
请注意用作替换模式和替换的分隔符的斜杠与用作目录分隔符的斜杠之间的隐式冲突。如果当前目录是,例如/foo/bar
,您给出的字符串tar
是
/^/foo/bar//foo/bar/package/
其中^
被视为模式,foo
作为替换,其余作为标志。在这里,我收到以下错误b
:
tar: Invalid replacement flag b
幸运的是,tar
我的 Mac 上的 接受其他字符来代替斜杠分隔符,因此您可以使用例如~
,这样可以更轻松地将完整路径名放入模式中。例如-s "~^a$~x/y~"
有效并重命名a
为x/y
.
反斜杠转义符(\/
、\057
或\x2f
)似乎不起作用,因此您需要选择模式本身不需要的一些字符作为分隔符。