LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1975|回复: 1

请教:可以使用管道把rar转换为tar.gz格式文件吗?

[复制链接]
发表于 2007-3-5 21:54:04 | 显示全部楼层 |阅读模式
我下载了很多电子书籍都是rar格式的,都解压要占用很多空间而且要建太多目录,而tar.gz格式的文件可以用konqueror直接打开,这样我只想看其中一章就很方便。
我尝试用unrar e dir/filename.rar | tar cvzf filename.tar.gz * 转换时提示
tar: *:无法 stat: 没有那个文件或目录
tar: 由于前面延迟的错误而退出
请问各位高人有什么好的解决办法吗?
发表于 2007-3-5 23:32:44 | 显示全部楼层
lz对管道的理解有误。
请看这个例子:

ls
tmp.rar
xxx@yyy ~/temp$ unrar e * | more

UNRAR 3.51 freeware      Copyright (c) 1993-2005 Alexander Roshal


Extracting from tmp.rar

Extracting  1.txt                                                     OK
Extracting  2.txt                                                     OK
Extracting  3.txt                                                     OK
All OK

可以看到unrar送入管道的输出决非lz所想象的那样,是简单的文件名(这个例子里是1.txt 2.txt 3.txt)。另外,即便unrar输出的乃是文件名,tar似乎仍然不接受这种依靠管道送入的参数:

xxx@yyy:~/temp$ ls
1.txt  2.txt  3.txt
xxx@yyy:~/temp$ tar cvzf tmp.tar.gz
tar: 谨慎地拒绝创建空归档文件
用“tar --help”或“tar --usage”获取更多信息。
xxx@yyy:~/temp$ ls
1.txt  2.txt  3.txt
xxx@yyy:~/temp$ ls | tar cvzf tmp.tar.gz
tar: 谨慎地拒绝创建空归档文件
用“tar --help”或“tar --usage”获取更多信息。

个人怀疑这应该是tar这个程序的设计原因。

即便tar接受管道过来的参数,楼主对管道的用法也有问题:
xxx@yyy:~/temp$ ls
tmp.rar
xxx@yyy:~/temp$ unrar e tmp.rar | tar cvzf h.tar.gz *
tmp.rar
xxx@yyy:~/temp$ ls
1.txt  2.txt  3.txt  h.tar.gz  tmp.rar
xxx@yyy:~/temp$ tar tvf *gz
-rw-r--r-- xxx/xxx     186 2007-03-05 23:15 tmp.rar

让我们假设unrar将解压出来的文件名送入管道,而tar可以从管道接受参数,那么,也应该这样写:
unrar e tmp.rar | tar cvzf filename.tar.gz
而不应该再加那个*了。具体可以去看看bash对*的解释等等文章。

个人对这个case的一个解决方法:
建立一个目录,将目标rar文件解压入该新目录。
然后用tar处理这个目录内文件,生成tar.gz
rm -rf那个目录。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表