文件比较小的时候还比较好处理,但是文件大了,磁盘空间可能就不够了。
就解 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 1
这根本就不是技术问题,建议楼主学一点服务器管理以及运维知识。
你这个问题类似于,在公共场所大小便怎样才能不被打。 答案并不是找出不被打的办法,而是根本就不能在公共场所大小便。 还有个类似问题,tcp 怎样才能不粘包。 |
8
lozzow 2020-07-15 00:55:21 +08:00 via iPhone 6
@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 1
|
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 - |