第2节. 文件压缩和解压缩

参数太多,一个个传进去

touch

rm

等命令后面的参数都有上限的。

touch f{1..100000000}应该就会报错,

xargs可以解决该问题

没有标准输入,怎么传给他比如rm

image-20220210104434947

上图 ls是没有标准输入的,管道符是传不过去的,所以说它是错误的,不是说:+号过时了用/替代。

img

参数太长怎么办

img

利用xargs获取stdin来传给rm -f作为参数

img

▲xargs是用来传参数的。

img

img

注意默认行为,达到一定长度就换行了

img

img

img

上图不是一个个传给touch的,而是一堆堆,大概是2000+一次传给touch,一个个传如下图

img

img

就是说 touch f1 f2 f3 这种一下创建多个文件,xargs 一行传过去也没问题,但是useradd xx yy 的yy生效的,所以需要换行。

创建10个用户

img

img

/7000,0不关心,7就是111,针对3个特殊权限有一个有就行

img

img

上图因为没有xargs传过去,所以就仅执行了ls -SL,验证下👇

img

find 后删除

img

img

img

上面是表面上合理,但可能有问题的。

特殊情况案例:单个文件名称位"fa b.txt"中间带空格。

img

img

观察上面报错,find 传给xargs后xargs默认是空格作为分隔符,所以"fa b.txt"就被判定位fa和b.txt两个文件了。

img

print0 是啥呢?是ASCII码为0,可不是十进制的0哦。

img

img

验证下-print0的分隔符为null的效果👇

img

img这是txt的t后买那就是00(print0)

img

-print0就是为了避免文件名带特殊符号。

img

第一个示例,是原地目录备份提好的,好在如果备份到其他地方存在子,子子文件夹不存在的情况从而报错的。要么复制其他目录就别带文件夹了,统统放在一个层级下就是不带{}的意思,这样又会存在文件同名的问题。详情见上一章节的文末内容。

练习

image-20220210112202558

打包压缩 gz bz2 xz 3个主流

img

压缩要消耗CPU的,看你需求,你的磁盘空间大,你需要节省CPU消耗,就不压。空间换性能(时间)

img

compress默认压缩后原文件就没了。

img

img

👆上图就是compress比较聪明,不给你压缩.jgp文件。同样👇issue根本不给你压缩。

img

img

compress是标准输入的信息进行压缩,完了屏幕上打印ctrl+d退出可见,可能存在乱码。

image-20220210115239129

img

zcat直接预览

img

gz后缀用的多

img

也是压完,原文件没了。

img

img

gzip -d 一样的也是gunzip解压

img

压缩比

img

image-20220210115752786

img

gzip也是标准输入形式,不过要带上-f

img

img

img

img

其实有没有标准输入都可以传的,有就用|,没有就用xargs。

当一个命令的标准输出非常大,比如数据库特别大就(压缩一下放硬盘里),就可以使用gzip配合生成文件。

bz2 压缩比跟高

img

img

img

bz还是比gz的9级,压缩度还要高。

所以

img

img

看下两个压缩算法:

img

img

img

上图的-r是不是写错了,应该是-R啊?⚪表示疑问。

img

👇解是能解,但是不能tab补全

img

👇这次都不能解了

img

后缀很关键啊

img

img

gzip、bz2 、xz 三种压缩,网上比较多。

zcat看.gz和.Z;bzcat看.bz2;xzcat看xz

xz 压缩工具

img

img

所以linux内核就是用xz

img

xz 压缩和解压缩速度慢,耗时长。

img

理论上xz要强,但是数据量不大的时候,还不如bz2。

观察

img

这里都是有tar

结论:都需要先用tar打个包,再用gz,bz2,xz去压缩(这些工具只能针对一个文件去压缩,不能针对文件夹)。

打完包就是一个文件了,再压就行了。

zip打包和压缩

img

img

img

img

这个勾选,你感觉不到什么变化,该怎么用还是怎么用。就是读取的时候会自动压缩解压缩。NTFS有这个压缩功能。

zip在windows和linux都是一样的软件

img

img

adding:下面的明细etc前头是没有/的,就是担心将来你解压缩导致覆盖了/etc。目的就是让你解压到当前文件夹下。👈压缩的时候把/etc/变成了etc/,把/根拿掉了,防止你加压缩把根下面的etc覆盖掉了,所以给你变成了相对路径。

👆上面的压完后再看:白压了,越压越大了,哈哈,找原因:

img

因为把内存里的文件带上了吧?搞不清⚪存在问题。

img

前面sysconfig是压缩后产生的文件,会自动打赏后缀.zip的。

img

管道符的使用▲ 线索总结

img这是解压后重定向到文件中。

img

img

原来是436K压缩后为93K

解压的风险,存在撑爆磁盘的可能

img

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2024-07-28 14:48:03

results matching ""

    No results matching ""