技术标签: 在linux上压缩文件
在 Linux 上有不少用于压缩文件的命令。最新最有效的一个方法是
xz,但是所有的方法都有节省磁盘空间和维护备份文件供以后使用的优点。在这篇文章中,我们将比较这些压缩命令并指出显著的不同。
tar
tar
命令不是专门的压缩命令。它通常用于将多个文件拉入一个单个的文件中,以便容易地传输到另一个系统,或者将文件作为一个相关的组进行备份。它也提供压缩的功能,这就很有意义了,附加一个
z 压缩选项能够实现压缩文件。
当使用 z 选项为 tar 命令附加压缩过程时,tar 使用 gzip 来进行压缩。
就像压缩一组文件一样,你可以使用 tar 来压缩单个文件,尽管这种操作与直接使用 gzip 相比没有特别的优势。要使用 tar 这样做,只需要使用
tar cfz newtarfile filename 命令来标识要压缩的文件,就像标识一组文件一样,像这样:
1.$ tar cfz bigfile.tgz bigfile
2. ^ ^
3. | |
4. ± 新的文件 ± 将被压缩的文件
5.
6.$ ls -l bigfile*
7.-rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile
8.-rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz
注意,文件的大小显著减少了。
如果你愿意,你可以使用 tar.gz 扩展名,这可能会使文件的特征更加明显,但是大多数的 Linux 用户将很可能会意识到与 tgz 的意思是一样的
– tar 和 gz 的组合来显示文件是一个压缩的 tar 文件。在压缩完成后,你将同时得到原始文件和压缩文件。
要将很多文件收集在一起并在一个命令中压缩出 “tar ball”,使用相同的语法,但要指定要包含的文件为一组,而不是单个文件。这里有一个示例:
1.$ tar cfz bin.tgz bin/*
2. ^ ^
3. | ±- 将被包含的文件
4. + 新的文件
zip
zip 命令创建一个压缩文件,与此同时保留原始文件的完整性。语法像使用 tar
一样简单,只是你必需记住,你的原始文件名称应该是命令行上的最后一个参数。
1.$ zip ./bigfile.zip bigfile
2.updating: bigfile (deflated 79%)
3.$ ls -l bigfile bigfile.zip
4.-rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile
5.-rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zip
gzip
gzip 命令非常容易使用。你只需要键入 gzip,紧随其后的是你想要压缩的文件名称。不像上述描述的命令,gzip
将“就地”加密文件。换句话说,原始文件将被加密文件替换。
1.$ gzip bigfile
2.$ ls -l bigfile*
3.-rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gz
bzip2
像使用 gzip 命令一样,bzip2 将在你选择的文件“就地”压缩,不留下原始文件。
1.$ bzip bigfile
2.$ ls -l bigfile*
3.-rw-rw-r-- 1 shs shs 18115234 Apr 15 17:57 bigfile.bz2
xz
xz
是压缩命令团队中的一个相对较新的成员,在压缩文件的能力方面,它是一个领跑者。像先前的两个命令一样,你只需要将文件名称提供给命令。再强调一次,原始文件被就地压缩。
1.$ xz bigfile
2.$ ls -l bigfile*
3.-rw-rw-r-- 1 shs shs 13427236 Apr 15 17:30 bigfile.xz
对于大文件来说,你可能会注意到 xz 将比其它的压缩命令花费更多的运行时间,但是压缩的结果却是非常令人赞叹的。
对比
大多数人都听说过“大小不是一切”。所以,让我们比较一下文件大小以及一些当你计划如何压缩文件时的问题。
下面显示的统计数据都与压缩单个文件相关,在上面显示的示例中使用
bigfile。这个文件是一个大的且相当随机的文本文件。压缩率在一定程度上取决于文件的内容。
大小减缩率
当比较时,上面显示的各种压缩命产生下面的结果。百分比表示压缩文件与原始文件的比较效果。
1.-rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile
2.------------------------------------------------------
3.-rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2 ~17%
4.-rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21%
5.-rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz ~21%
6.-rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz ~13%
7.-rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21%
xz 命令获胜,最终只有压缩文件 13% 的大小,但是所有这些压缩命令都相当显著地减少原始文件的大小。
是否替换原始文件
bzip2、gzip 和 xz 命令都用压缩文件替换原始文件。tar 和 zip 命令不替换。
运行时间
xz 命令似乎比其它命令需要花费更多的时间来加密文件。对于 bigfile 来说,大概的时间是:
1.命令 运行时间
2.tar 4.9 秒
3.zip 5.2 秒
4.bzip2 22.8 秒
5.gzip 4.8 秒
6.xz 50.4 秒
解压缩文件很可能比压缩时间要短得多。
文件权限
不管你对压缩文件设置什么权限,压缩文件的权限将基于你的 umask 设置,但 bzip2 除外,它保留了原始文件的权限。
与 Windows 的兼容性
zip 命令创建的文件可以在 Windows 系统以及 Linux 和其他 Unix
系统上使用(即解压),而无需安装其他工具,无论这些工具可能是可用还是不可用的。
解压缩文件
解压文件的命令与压缩文件的命令类似。在我们运行上述压缩命令后,这些命令用于解压缩 bigfile:
◈ tar: tar xf bigfile.tgz◈ zip: unzip bigfile.zip◈ gzip: gunzip bigfile.gz◈
bzip2: bunzip2 bigfile.gz2◈ xz: xz -d bigfile.xz 或 unxz bigfile.xz
自己运行压缩对比
如果你想自己运行一些测试,抓取一个大的且可以替换的文件,并使用上面显示的每个命令来压缩它 —— 最好使用一个新的子目录。你可能需要先安装
xz,如果你想在测试中包含它的话。这个脚本可能更容易地进行压缩,但是可能需要花费几分钟完成。
1.#!/bin/bash
2.
3.# 询问用户文件名称
4.echo -n "filename> "
5.read filename
6.
7.# 你需要这个,因为一些命令将替换原始文件
8.cp $filename $filename-2
9.
10.# 先清理(以免先前的结果仍然可用)
11.rm filename.∗ 12. 13.tarcvfz./filename.* 12. 13.tar cvfz
./filename.∗ 12. 13.tarcvfz./filename.tgz $filename > /dev/null
14.zip $filename.zip $filename > /dev/null
15.bzip2 $filename
16.# 恢复原始文件
17.cp $filename-2 $filename
18.gzip $filename
19.# 恢复原始文件
20.cp $filename-2 $filename
21.xz $filename
22.
23.# 显示结果
24.ls -l $filename.*
25.
26.# 替换原始文件
27.mv $filename-2 $filename
最后分享一些相关资料交流裙:1126743406
解决办法:将C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64目录下的rc.exe 和rcdll.dll 复制到C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64如果qt版本是32bit的:将C:\Program Files...
详细演示将本地镜像推送到远程阿里云仓库
1、 环境检查如果flutter 没有配置,请参考 https://editor.csdn.net/md/?articleId=123640336,配置相关环境已配置,在终端输入 flutter doctor 检测环境,输出如下fanhudeMacBook-Pro:~ XXX$ flutter doctorDoctor summary (to see all details, run flutter doctor -v):[✓] Flutter (Channel stable, 2.10.3, o
本文基于docker-compose安装APISIX的详细步骤,并给出配置及使用示例并将安装过程中的问题进行了梳理总结
简介在本页中,我们将提供Stream.forEachOrdered()和Stream.forEach()方法。两种方法都以使用者的身份执行操作。forEachOrdered()和forEach()方法的区别在于forEachOrdered()将始终按照流(stream)中元素的遇到顺序执行给定的操作,而forEach()方法是不确定的。在并行流(parallel stream)中,forEach()方法可能不一定遵循顺序,而forEachOrdered()将始终遵循顺序。在序列流(sequential
Qt5实战之Qt Platform AbstractionQPA (Qt Platform Abstraction) 即Qt平台抽象层,移植自Qt4,在Qt5中替代QWS(Qt Window System) QPA插件通过子类化不同的QPlatform*类来实现。QPA中有两个基类:QPlatformIntergration窗口系统集成和QPlatformTheme 深入平台主题和集成。 QSty
webpack.config.js// 将相对路径转换为绝对路径的包const path = require('path');module.exports = { mode: "production", // "production" | "development" | "none" // Chosen mode tells webpack to use its built-in o...
Manipulation-DetectionTampering detection related sourcesCode Source1.lllumination estimationhttps://github.com/bomb2peng/CASIA_3Dlightinghttps://github.com/lorecioni/ImageSplicingDetection2.Resampling and rotation detectionhttps://sites.google.com
我们知道sql中并发控制采用的乐观锁就是在记录中增加版本号或timestamp,那么mongodb中如何实现呢?Mongodb不善于处理事务,但提供了findAndModify命令。该命令允许对文档进行原子性更新,并在同一次调用中返回: 代码如如:db.collection_yown.findAndModify( { query:{"name":"yown"},update:{
一、Swagger是什么鬼?What is Swagger?The goal of Swagger is to define a standard, language-agnostic interface to REST APIs which allows both humans and...
第一种配置方式 @Value("#{id名称.变量名}") db.properties文件yyf_name=liuyyf_password=123在SpringMVC.xml文件中加入<util:properties id="idConfig" location="classpath:db.properties" />controller中(自行创建c...
00 文章基本信息01 摘要以往方法存在的不足:当前主流方法在学习用户的check-in序列中的POI-level POI级(如何理解POI-level:比如一个学生一年到头都在学校里不出校门,他的所有的POIs无非就是教室、宿舍、食堂、图书馆,这样的单个POI连起来很难判断出用户的行为模式(有点不太好解释))序列时忽略了那些代表用户的社会经济活动和用户偏好一致性的子序列模式(下面介绍什么是子序列模式)。但是由于很难定义那些complex but meaningful的子序列的granularity粒