Linux中,向.tar.gz/.gz文件中添加一个文件,如何做?
迷茫
迷茫 2017-04-17 15:30:03
0
3
939

描述问题

需求: 对.zip .gz .tar.gz文件添加一个/几个新文件进去

在Windows上,操作极其简单,借助WinRAR,学习成本为0

在Linux上, 我

  1. 先是man tar man gzip

  2. 搜索 update append (gzip的搜索,直接没有, 关键词不对?)

  3. 然而没有找到支持压缩文件的选项(仅仅是对归档文件的支持)

注意到我需要:

  1. .zip .gz .tar.gz

  2. append/delete
    因此有6个需求

解决方法是?

上下文环境

Linux(仅仅使用发行版内置命令, 不借助任何外部工具, 换句话来说: 命令大概是gzip tar ...这些)
仅仅使用bash命令行(无GUI)

重现

查看man命令即可

相关代码

man的一部分信息

 -A, --catenate, --concatenate
           append tar files to an archive   是archive!

     -c, --create
           create a new archive

     -d, --diff, --compare
           find differences between archive and file system

     --delete
           delete from the archive (not on mag tapes!)

     -r, --append
           append files to the end of an archive

     -t, --list
           list the contents of an archive

     --test-label
           test the archive volume label and exit

     -u, --update
           only append files newer than copy in archive

报错信息

上述选项,对.tar.gz使用时会报错
比如: 
tar rzv -f zipfile.tar.gz new-file
tar: Cannot update compressed archives

相关截图

已经尝试哪些方法仍然没有解决(附上相关链接)

Google了

  1. append file to .tar.gz

  2. append file to .gz

  3. append dir to .tar.gz

附:
不成熟的吐槽

Linux是不是把事情搞复杂了?
还是我搜索/探索姿势不对? 
为啥有时候在Win上极其简单的一件事情,到了Linux上就要上升到折腾地步?  (得到一种莫名其妙的自我感动? )
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
PHPzhong
tar: Cannot update compressed archives

这个报错其实已经说明问题了--不能对压缩的’包‘进行更新操作。所以,可行的办法是将tar.gz 先解压成 tar,然后更新,最后重新压缩(可以写个脚本)。

关于‘Win上极其简单的一件事情’,只是因为 Win 上的软件通常封装的比较好而已,把“解压-更新-压缩”的过程隐藏起来了而已。这里面孰优孰劣要看具体情况,winrar 如题主所说学习成本为零,但是缺点是不可不可编程(也可能是我孤陋寡闻)。试想,如果有每天有大量的压缩包需要更新,那是不是要专门找个人在 winrar 里点点点呢?

PHPzhong

目前所知,压缩后的文件是不可追加的。
可以先追加到tar文件,再压缩也行吧?
tar -rvf ttt.tar aaa.txt

黄舟

只用targzip的话,.tar.gz好像只能先解压缩再压缩...

话说难道我们用的google不是同一个?为啥我搜到了个解决方案:

http://unix.stackexchange.com...

里面提到使用FUSE或者tarfs就可以了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!