跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • [ Linux ] tar 打包解包都需要两倍空间,有什么办法可以解决吗
未分類
21 7 月 2020

[ Linux ] tar 打包解包都需要两倍空间,有什么办法可以解决吗

[ Linux ] tar 打包解包都需要两倍空间,有什么办法可以解决吗

資深大佬 : mianhk 6

文件比较小的时候还比较好处理,但是文件大了,磁盘空间可能就不够了。

就解 tar 包而言,目前看到的比较流行的办法是:

1.找到 tar 中的一个个文件,解一个删一个。优点是在文件夹大小差不多时候,占用空间会小很多。缺点是,极慢
2.远程解包,然后 rsync 到目标机器。问题是还得专门搞一台机器。。

大佬有話說 (20)

  • 資深大佬 : Osk

    换 7z ?

  • 資深大佬 : Jirajine

    管道

  • 資深大佬 : cev2

    1.打包+压缩不需要两倍空间;
    2.tar 可直接挂载,不需要解包。

  • 資深大佬 : dangyuluo

    pipe

  • 資深大佬 : codehz

    https://unix.stackexchange.com/questions/341458/decompress-gzip-file-in-place
    按这个方法解压应该可以(改 unzip 为 tar xvf 附带压缩参数)
    压缩大概也可以,但是不确定能不能用 shell 实现

  • 資深大佬 : laminux29

    这根本就不是技术问题,建议主学一点服务器管理以及运维知识。

    你这个问题类似于,在公共场所大小便怎样才能不被打。

    答案并不是找出不被打的办法,而是根本就不能在公共场所大小便。

    还有个类似问题,tcp 怎样才能不粘包。

  • 資深大佬 : laqow

    @laminux29 也有几十个 gz 打包成一个 tar 加起来几十 G 的场合吧

  • 資深大佬 : lozzow

    @laminux29 没必要这样吧,我还是相信很多朋友都不知道这个情况吧,大家不一定有朋友你这样的高度,我反正还是挺期待有朋友能回答一下主的问题,然后学习一下

  • 資深大佬 : shakoon

    主可能还没有搞明白,tar 是没有压缩的,只是物理上把文件放到一起,和 zip/rar/7z/gz 之类的完全是两回事,所以才会用到你说的“两倍”空间

  • 資深大佬 : linjinbao66

    我可以想到的方法,先创建一个 tar,包再往里面添加,添加一个删除一个,管道符配合使用,添加一个删除一个

  • 資深大佬 : linjinbao66

    “`shell
    tar -cvf tmp.tar b.txt
    for file in `find 2020`
    do
    echo $file
    tar -uvf tmp.tar $file
    rm -rf $file
    done
    “`

    ## 1. 创建 tmp.tar 文件
    ## 2. 遍历需要打包的文件,追加到 tar 包内
    ## 3. 删除已经追加的

  • 資深大佬 : lolizeppelin

    可以看下 coreutils 里 split 的的代码
    如果也是复制, 那应该没有一般性的做法能做到

  • 主 資深大佬 : mianhk

    @Osk #1 已经用了没办法改了
    @Jirajine #2 单纯只是解 tar 包的话,解完前后,原 tar 包和解开的文件都在,肯定还是两倍空间了。。
    @cev2 #3 1.只打包和解包的话是会的,原文件和新文件夹 加在一起。2.直接挂载想写文件进 tar 包可以直接操作吗,是不是也慢一些
    @codehz #5 粗略看了一下,这个回答好像本身就不建议用。。

    @laminux29 #6 现在问题是,我有个朋友已经公共场合大小便了,可以怎么处理让他不被打吗
    @shakoon #9 就是知道了这一点,所以才想要有没有什么好的办法,最前面说到的两个是可以保证一倍空间的,但是都还是有劣势
    @linjinbao66 #10 同第一种方式,这个过程耗时太长了

  • 資深大佬 : Latin

    tar -czvf
    -z 添加 gzip 压缩

  • 資深大佬 : Jirajine

    @mianhk 比如你的 tarball 是从网络下载,
    wget -O – xxx.tar.gz | tar xz -f –
    就可以只占用一份空间了。

  • 主 資深大佬 : mianhk

    @Jirajine #15 不是网络下载的。。
    @lolizeppelin #12 可能只有开始说的第二种算是比较好的了

  • 資深大佬 : ETiV

    「磁盘空间可能就不够了」
    不能加吗,或者 NFS 挂载一个远程的磁盘

    https://en.wikipedia.org/wiki/Tar_(computing)

    tar … The name is derived from “tape archive”, as it was originally developed to write data to sequential I/O devices with no file system of their own.

  • 資深大佬 : iamwho

    这和 linux 有什么关系?

  • 資深大佬 : byzf

    我有个 100G 的文件夹, 拷贝了一份, 是不是必须占用 200G 硬盘?

    答: 压缩

    我不想用压缩

    答: 那你在问啥

  • 資深大佬 : chzhx

    记得当时 aix 下的 tar 没有-z 参数,我是用管道打包和解压的。
    tar -cvf – xxxx | gzip >xxxx.tar.gz
    gzip -cd xxxx.tar.gz | tar -xvf –

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具