
文件比较小的时候还比较好处理,但是文件大了,磁盘空间可能就不够了。
就解 tar 包而言,目前看到的比较流行的办法是:
1.找到 tar 中的一个个文件,解一个删一个。优点是在文件夹大小差不多时候,占用空间会小很多。缺点是,极慢
2.远程解包,然后 rsync 到目标机器。问题是还得专门搞一台机器。。
1 Osk 2020-07-14 22:01:21 +08:00 via Android 换 7z ? |
2 Jirajine 2020-07-14 22:03:29 +08:00 via Android 管道 |
3 cev2 2020-07-14 22:17:20 +08:00 1.打包+压缩不需要两倍空间; 2.tar 可直接挂载,不需要解包。 |
4 dangyuluo 2020-07-14 22:28:26 +08:00 pipe |
5 codehz 2020-07-14 22:43:50 +08:00 https://unix.stackexchange.com/questions/341458/decompress-gzip-file-in-place 按这个方法解压应该可以(改 unzip 为 tar xvf 附带压缩参数) 压缩大概也可以,但是不确定能不能用 shell 实现 |
6 laminux29 2020-07-14 23:18:57 +08:00 这根本就不是技术问题,建议楼主学一点服务器管理以及运维知识。 你这个问题类似于,在公共场所大小便怎样才能不被打。 答案并不是找出不被打的办法,而是根本就不能在公共场所大小便。 还有个类似问题,tcp 怎样才能不粘包。 |
8 lozzow 2020-07-15 00:55:21 +08:00 via iPhone @laminux29 没必要这样吧,我还是相信很多朋友都不知道这个情况吧,大家不一定有朋友你这样的高度,我反正还是挺期待有朋友能回答一下楼主的问题,然后学习一下 |
9 shakoon 2020-07-15 08:30:01 +08:00 楼主可能还没有搞明白,tar 是没有压缩的,只是物理上把文件放到一起,和 zip/rar/7z/gz 之类的完全是两回事,所以才会用到你说的“两倍”空间 |
10 amrom 2020-07-15 09:03:10 +08:00 我可以想到的方法,先创建一个 tar,包再往里面添加,添加一个删除一个,管道符配合使用,添加一个删除一个 |
11 amrom 2020-07-15 09:40:11 +08:00 ```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. 删除已经追加的 |
12 lolizeppelin 2020-07-15 09:46:33 +08:00 可以看下 coreutils 里 split 的的代码 如果也是复制, 那应该没有一般性的做法能做到 |
13 mianhk OP @Osk #1 已经用了没办法改了 @Jirajine #2 单纯只是解 tar 包的话,解完前后,原 tar 包和解开的文件都在,肯定还是两倍空间了。。 @cev2 #3 1.只打包和解包的话是会的,原文件和新文件夹 加在一起。2.直接挂载想写文件进 tar 包可以直接操作吗,是不是也慢一些 @codehz #5 粗略看了一下,这个回答好像本身就不建议用。。 @laminux29 #6 现在问题是,我有个朋友已经公共场合大小便了,可以怎么处理让他不被打吗 @shakoon #9 就是知道了这一点,所以才想要有没有什么好的办法,最前面说到的两个是可以保证一倍空间的,但是都还是有劣势 @linjinbao66 #10 同第一种方式,这个过程耗时太长了 |
14 Latin 2020-07-15 10:48:31 +08:00 tar -czvf -z 添加 gzip 压缩 |
15 Jirajine 2020-07-15 10:50:49 +08:00 via Android |
16 mianhk OP |
17 ETiV 2020-07-15 14:33:59 +08:00 「磁盘空间可能就不够了」 不能加吗,或者 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. |
18 iamwho 2020-07-15 14:56:31 +08:00 这和 linux 有什么关系? |
19 byzf 2020-07-16 13:58:36 +08:00 我有个 100G 的文件夹, 拷贝了一份, 是不是必须占用 200G 硬盘? 答: 压缩 我不想用压缩 答: 那你在问啥 |
20 chzhx 2020-07-16 15:45:17 +08:00 记得当时 aix 下的 tar 没有-z 参数,我是用管道打包和解压的。 tar -cvf - xxxx | gzip >xxxx.tar.gz gzip -cd xxxx.tar.gz | tar -xvf - |