从tar存档中提取一些成员并通过网络进行管道传输


9

编辑:我想多member01member02和目录blah/

tarball_1.tar.gz包含test/20个文件的目录。我只想提取成员test/member01test/member02目录blah/,然后使用ssh / scp将它们复制到另一个“ remote_host”。

可以单线完成吗?我考虑过使用tarpax或,cpio但是我想我对这些实用程序还不是很熟练。

Answers:


15
tar -xzOf file.tar.gz file_you_want_to_extract | ssh user@host 'cat > /path/to/destination_file'
  • -x :提取
  • -z :通过 gzip
  • -f :将文件作为输入。
  • -O :提取到标准输出

file_you_want_to_extract是从提取file.tar.gz到标准输出,管道送入ssh,它运行cat在远程主机上,并在到远程写入其标准destination_file。当然,您需要确保对远程主机上的所需目标文件具有写权限。


我在原始帖子中不清楚:)我需要提取多个成员以及一个目录。
菲利普·阿尔瓦雷斯

应该是tar -xz0f:f档案名称之后
Felipe Alvarez

1
如果您希望多个成员成为一员,则提取多个成员将变得混乱,因为将多个文件提取到stdout并没有多大意义。您可能需要tar为每个要提取的内容scp -r member1 member2 blah user@host:/destination/folder/进行复制。如果您真的想使其成为单行,则可以使用将所有这些命令连接起来&&。一个更实用的选择是制作一个脚本,该脚本还要遍历命令行选项并tar为每个选项执行,然后scp在最后将所有选项都执行。
atanamir 2011年

啊,我明白了。因此,没有“简单”的单线方法。谢谢:-)
费利佩·阿尔瓦雷斯

2
另外,如果“单线”比“花费多长时间”更重要,则可以通过ssh传递整个存档,并从另一侧提取所需的成员“ cat file.tar.gz | ssh user @ host' tar zxvf file1 file2 dir1'–
Colin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.