如何在日光浴中产生压缩焦油?


11

我已登录到Sun Solaris OS。我想创建并解压缩tar文件。我尝试了这个普通的UNIX命令:

tar -cvzf file.tar.gz directory1

它无法在Sun OS中执行,并出现以下错误

bash-3.2$ tar -cvzf file.tar.tz directory1
tar: z: unknown function modifier
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...

2
您为什么认为这是普通的UNIX命令?
schaiba

我认为您需要花一些时间阅读Unixes Linux和GNU工具之间的差异。
coteyr

4
当他们将那个z标志添加到GNU tar中时,我们失去了教人如何逻辑思考和构建管道的最伟大的例子……

Answers:


28

为了避免创建临时中间文件,可以使用此命令

tar cvf - directory1|gzip -c >file.tar.gz

2
这具有一些处理可以并行进行的潜在优势。
psmears

f -必需的,还是tar默认情况下Solaris 输出到stdout?
标记

2
@Mark:根据手册页,“如果f省略,tar将使用TAPE环境变量指示的设备(如果已设置);否则,将使用中定义的默认值/etc/default/tar。” 因此,不,您似乎可以安全地认为f -不需要它。
Ilmari Karonen

@Romeo:感谢您的回答,我发现它很有用。您能说明为什么在cvf和目录名称之间需要“-”吗?此外,我在多个操作系统(Solaris 10、11.4,Linux(RHEL,CentOS,Oracle等)上尝试了您的命令,并且能够始终如一地工作。我还回顾了各自的tar手册页-为什么以上内容在cvf之前不带“-”的Linux中起作用?我希望Linux需要“ tar -cvf ....”之类的东西,再次感谢您的回答。
rc1

@ rc1,tar中的破折号表示您将输出文件设置为STDOUT。参数有两种样式,即BSD和SYSV。Linux tar可以与它们一起使用(在cvf之前加上and破折号)
Romeo Ninov

10

看起来 Solaris的tar不知道如何压缩。因此,只需手动执行:

tar -cvf file.tar directory1 && gzip file.tar

-z无论如何,这就是GNU tar所做的所有切换。上面的命令将产生file.tar.gz


这将起作用(只要您有足够的备用磁盘空间来存储中间未压缩的file.tar归档文件即可),但是不必要的是它很慢且浪费磁盘空间。我想不出比罗密欧·尼诺夫的回答更可取的任何情况。
Ilmari Karonen

1
@IlmariKaronen我也不能。我只是首先想到了这一点。
terdon

2

检查是否已SUNWgtar安装。这是GNU的GNU版本,tar并提供了/usr/sfw/bin/gtar该版本,允许使用tar的GNU选项。


-1

请尝试以下命令

tar -cvf file.tar directory1 && gzip file.tar

(将文件压缩到solaris上)

gunzip file.tar.gz

(解压缩)


1
这不会超出先前的答案
Jeff Schaller

它还只是将整个tar文件(包括标头中的所有二进制文件)转储到终端上,而不是取消存档文件。之后,您可能需要重置终端。
Paul_Pedant '19
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.