百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

如何在Linux或者macOS上压缩文件的 5种方法

sinye56 2024-10-30 03:53 20 浏览 0 评论

要节省空间那么直接xz,压缩率刚刚的

centos7 root@parallels:/var/log# du -sh a.txt
485M    a.txt
centos7 root@parallels:/var/log# time xz a.txt


real    0m47.252s
user    0m47.066s
sys    0m0.178s
centos7 root@parallels:/var/log# du -sh a.txt.xz
724K    a.txt.xz
centos7 root@parallels:/var/log# rpm -qa xz
xz-5.2.2-1.el7.x86_64



在Linux系统上有很多工具可以用来压缩文件,但它们的行为方式或产生的压缩程度并不相同。在这篇文章中,我们将对其中的五个工具进行比较。

Linux上有不少压缩文件的命令。其中最新最有效的是xz,但它们都有优点,既能节省磁盘空间,又能保存文件供以后使用。在这篇文章中,我们将对这些压缩命令进行比较,并指出它们的显著区别。

tar

tar命令不是专门的压缩命令。它一般是用来把一些文件拉成一个文件,方便传送到另一个系统,或者把文件作为一个相关的组进行备份。它还提供了压缩这个功能,这是很有意义的,增加z压缩选项就可以实现这个功能。当在tar命令中加入z选项的压缩功能时,tar会使用gzip来进行压缩。

$ tar cfz bigfile.tgz bigfile
            ^            ^
            |            |
            +- new file  +- file to be compressed

$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile
-rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz

请注意文件大小的显著减少。如果你喜欢,你可以使用tar.gz扩展名,这可能会使文件的特征更明显一些,但大多数Linux用户可能会认识到tgz的意思是一样的--tar和gz的组合,以表明该文件是一个压缩的tar文件。压缩完成后,你将同时拥有原始文件和压缩文件。要将多个文件收集在一起,并在一个命令中压缩产生的 "tar",使用相同的基本语法,但指定要包含的文件为一组,而不是单个文件。下面是一个例子。

$ tar cfz bin.tgz bin/*
          ^         ^
          |         +-- files to include
          + new file

zip

zip 命令创建了一个压缩文件,同时保留了原始文件的完整性。语法很简单,除了和tar一样,你必须记住你的原始文件应该是命令行的最后一个参数。

$ zip ./bigfile.zip bigfile
updating: bigfile (deflated 79%)
$ ls -l bigfile bigfile.zip
-rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile
-rw-rw-r-- 1 shs shs  21606889 Apr 16 11:19 bigfile.zip

gzip

gzip命令使用起来非常简单。你只需输入 "gzip",后面跟着你要压缩的文件名。与上述命令不同的是,gzip将对文件进行 "原地 "加密,换句话说,原始文件将被加密后的文件所取代。换句话说,原始文件将被加密后的文件所取代。

$ gzip bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs  21606751 Apr 15 17:57 bigfile.gz

bzip2

与gzip命令一样,bzip2会对你选择的文件进行 "原地 "压缩,只留下原始文件。

$ bzip bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs  18115234 Apr 15 17:57 bigfile.bz2

xz

作为压缩命令团队中相对较新的一员,xz在压缩文件的能力方面是一个领跑者。和前面两个命令一样,你只需要向命令提供文件名。同样,原始文件也会被压缩。

$ xz bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 13427236 Apr 15 17:30 bigfile.xz

对于大文件,你可能会注意到,xz比其他压缩命令需要更长的运行时间,但压缩结果非常令人印象深刻。需要考虑的比较大多数人都听过这样一句话:"大小不是万能的"。所以,让我们来比较一下文件大小以及其他一些问题,当你制定计划如何压缩文件时,需要考虑的问题。,下面显示的统计数据都与压缩上面显示的示例命令中使用的单个文件--bigfile有关。这个文件是一个大而随机的文本文件。压缩率将在一定程度上取决于文件的内容。

缩小大小

经过比较,上面显示的各种压缩命令得到了以下结果。百分比代表压缩后的文件与原始文件的比较。

-rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile
------------------------------------------------------
-rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2    ~17%
-rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz     ~21%
-rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz    ~21%
-rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz     ~13%
-rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip    ~21%

xz命令胜出,最后只有原文件的13%大小,但这些压缩命令都使原文件大小减少了不少。

无论原始文件是否被替换bzip2、gzip和xz命令都是用压缩版本替换原始文件。而tar和zip命令则不会。

运行时间

xz命令似乎比其他命令需要更多的时间来加密文件。对于bigfile来说,大概的时间是。

command   run-time
tar       4.9 seconds
zip       5.2 seconds
bzip2      22.8 seconds
gzip       4.8 seconds
xz       50.4 seconds

解压时间可能比压缩时间小得多。

文件权限

无论您在原始文件上设置了什么权限,压缩文件的权限将基于您的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,你可能必须先安装xz.这个脚本可以使比较更容易,但可能需要几分钟来完成。

#!/bin/bash
# ask user for filename
echo -n "filename> "
read filename
# you need this because some commands will replace the original file
cp $filename $filename-2
# clean up first (in case previous results are still available)
rm $filename.*
tar cvfz ./$filename.tgz $filename > /dev/null
zip $filename.zip $filename > /dev/null
bzip2 $filename
# recover original file
cp $filename-2 $filename
gzip $filename
# recover original file
cp $filename-2 $filename
xz $filename
# show results
ls -l $filename.*
# replace the original file
mv $filename-2 $filename

参考:

https://www.networkworld.com/article/3538471/how-to-compress-files-on-linux-5-ways.html

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: