Howto管道:cp | 焦油| gzip没有创建中间文件?


31

有人可以告诉我是否可以管道连接| 不必在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
gzip  pipe  tar 

你为什么要管道cp A B
Dor

1
重命名为mv
2011年

3
请解释为什么要复制AB第一位。
讲者2012年

Answers:


42

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

含gzip的tar:

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 &&在上述任一命令前加上a 并A与之交换即可B

tar和gzip的示例:

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


1
这是正确的,应该如此标记。对于管道选项,必须在“ tar”之后包含“-”,否则会得到“ tar:怯Co地拒绝创建空存档”。
Adambean '17年

6

这取决于您的tar版本

如果您具有支持成员转换的版本(--transform或--xform),则只需执行

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz

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

tar -zcvf B.tar.gz --transform=s/A/B/ A

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

 cp A B && tar -zcvf B.tar.gz B

但是,如果只压缩一个文件,为什么不一起跳过tar部分,而只是做

cat A | gzip -9 > B.gz

我已经像在示例中一样使用了cp,但是重命名为mv

0

如果您要使用cp其他名称/位置制作副本,则只需在创建完整的.gzip文件时包括所需的完整/最终路径名即可:

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz

这不起作用,产生“ tar:怯ward地拒绝创建一个空的存档”。
Adambean '17年

@Adambean也许您想使用tar -czf - some-folder > some-archive.tar.gz
tsauerwein '18

1
@tsauerwein,是的,请参阅我对14个月前以下答复的答复……
Adambean
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.