有人能告诉我是否可以通过管道传输 | 而不需要在 A 和 B.tar.gz 之间的任何地方创建物理文件吗?
这就是我想做的事情:
- 文件A
- 将 A 重命名为 B
- 焦油B
- gzip -9 压缩文件
例如:
cp A B | tar cvf - B | gzip -9 B.tar.gz
答案1
可以使用以下示例来避免创建中间文件:
使用 gzip 压缩:
tar cf - A | gzip -9 > B.tar.gz
不使用 tar 的 gzip:
gzip -9c A > B.gz
不使用 gzip 的 tar:
tar cf B.tar A
重命名(移动)A
到B
first 对我来说没有意义。如果这是有意为之,那么只需mv A B &&
在上述任一命令之前放置一个,然后A
与B
那里交换。
tar 和 gzip 的示例:
mv A B && tar cf - B | gzip -9 > B.tar.gz
答案2
这取决于你的 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
答案3
如果您要使用cp
不同的名称/位置来制作副本,则只需在创建完整的 .gzip 文件时包含所需的完整/最终路径名:
tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz