【发布时间】:2023-03-03 19:12:01
【问题描述】:
我现在有一个 tar.gz,我只想从中提取一两个文件,然后将它们打包/添加到一个新的 tar.gz 中,一次完成。当然,我可以只保存到一个临时文件并使用它,但绝对要求是在没有任何中间文件输出的情况下完成这一切,即管道。换句话说,我想要的是类似下面的伪代码(显然语法不正确)
tar -xvf first.tar.gz subdir1/file1 subdir2/file2 | tar cf - | gzip > second.tar.gz
有谁知道正确的语法吗?我尝试了很多变种,但都无济于事。
我也对使用 cpio 的想法持开放态度,但我再次对如何正确地降低语法感到困惑,据我了解,cpio 只接收档案或文件名,而不是文件。
任何帮助将不胜感激。
编辑:tarball 中没有特定的文件名模式可供提取。鉴于 BSD 和 GNU tar 一次只能搜索一种模式,我不确定是否可以分别使用包含/排除标志。
【问题讨论】:
-
您要从第一个 tarball 中提取的文件的文件名中是否有某种模式?
-
我已经编辑了下面的 GNU tar 和 BSD tar 解决方案,以显示我的测试都允许删除或包含多个文件的规范。所以这两种解决方案都可以解决您的问题。
标签: linux gzip pipe command-line-arguments tar