如何管道:cp | 焦油 | gzip 而不创建中间文件?

39 gzip tar pipe

谁能告诉我是否可以管道| 这无需在 A 和 B.tar.gz 之间的任何位置创建物理文件?

这就是我想要做的:

  1. 文件A
  2. 将 A 重命名为 B
  3. 焦油
  4. gzip -9 B.tar.gz

例如:

cp A B | tar cvf - B | gzip -9 B.tar.gz
Run Code Online (Sandbox Code Playgroud)

spe*_*akr 51

以下示例可用于避免创建中间文件:

tar 与 gzip:

tar cf - A | gzip -9 > B.tar.gz

没有 tar 的 gzip:

gzip -9c A > B.gz

没有 gzip 的 tar:

tar cf B.tar A

重命名(移动)AB第一个对我来说没有意义。如果这是有意的,那么只需mv A B &&在上述任一命令之前放置一个并AB那里交换。

tar 和 gzip 示例:

mv A B && tar cf - B | gzip -9 > B.tar.gz


小智 9

这取决于你的tar版本

如果您有支持成员转换(--transform 或--xform)的版本,那么您可以简单地执行

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz
Run Code Online (Sandbox Code Playgroud)

| 如果您的 tar 支持 -z 选项,则可以避免 gzip -9 >B.tar.gz

tar -zcvf B.tar.gz --transform=s/A/B/ A
Run Code Online (Sandbox Code Playgroud)

如果您的 tar 版本不支持 --transform 那么您必须先复制文件,例如

 cp A B && tar -zcvf B.tar.gz B
Run Code Online (Sandbox Code Playgroud)

但是,如果您只压缩一个文件,为什么不一起跳过 tar 部分而直接执行

cat A | gzip -9 > B.gz
Run Code Online (Sandbox Code Playgroud)