专栏首页张戈的专栏Linux系统zip压缩命令详细参数,附文件排除选项的正确用法

Linux系统zip压缩命令详细参数,附文件排除选项的正确用法

这次给博客添加了纯代码缓存之后,发现缓存文件竟然达到了 50 多 MB!而我的服务器每次还需要同步至七牛,文件体积的增加都会增加文件远程同步备份的时间。因此,我第一想到的办法就是在网站 ZIP 压缩打包的时候排除缓存文件夹。

下面是从网上找来的 ZIP 命令参数:

zip Linux上适用的参数:
-1 : 最快压缩,压缩率最差。
-9 : 最大压缩,压缩率最佳。
-b : 暂存文件的路径。这个参数一般在要产生的 zip 文件存在,而硬盘现有空间不足时。
-c : 替新增或更新的文件增加一行注解。
-d : 从 zip 文件移出一个文件。
-D : 不要在 zip 文件中储存文件的目录信息。
-f : 以新文件取代现有文件。
-F : 修复已经损毁的压缩文件。
-g : 将文件压缩附加到 zip 文件中。
-h : 显示辅助说明。
-i : 指定要含入的某些特定文件。
-j : 只储存文件的名称,不含目录。
-k : 强迫使用 MSDOS 格式文件名。
-l : 将 CR ( Carriage Return ) LF ( Line Feed ) 转换成 LF,一般是要将 MS-DOS 上的文本文件压缩后拿到 UNIX 下使用时才使用此参数。这只适用于文本文件 ( .txt ),如果用于二进制文件则会造成二进制文件损毁。
-L : 显示 zip 命令的版权。
-m : 将特定文件移入 zip 文件中,并且删除特定文件。
-n : 不压缩特定扩展名的文件。
-o : 将 zip 文件的时间设成最后修正 zip 文件的时间。
-q : 安静模式,不会显示相关讯息和提示。
-r : 包括子目录。
-t : 只处理 mmddyy 日期以后的文件。
-T : 测试 zip 文件是否正常。
-u : 只更新改变过的文件和新文件。
-v : 显示版本资讯或详细讯息。
-x : 不需要压缩的文件。
-y : 将 symbolic link 压缩,而不是压缩所连结到的文件。
-z : 为 zip 文件增加注解。
-# : 设定压缩速度,-0 表示不压缩,-1 表示最快速度的压缩,
-9 :表示最慢速度的压缩 ( 最佳化的压缩 ),预设值为 -6。
-@ : 从标准输入读取文件名称。

其中-x 参数表示不需要压缩的文件。按 tar 命令操作经验,我直接如下执行命令:

zip -9r -x *cache* backupfile.zip /www/backupdir

发现报如下错误:

zip error: Invalid command arguments (nothing to select from)

然后 man 了一下,找到如下-x 参数说明:

按照-x 的参数说明

-x files
  --exclude files
  Explicitly exclude the specified files, as in:
  zip -r foo foo -x \*.o
 
  which will include the contents of foo in foo.zip while excluding all the files that end in .o.  The backslash avoids the  shell  filename
  substitution, so that the name matching is performed by zip at all directory levels.

如下继续测试:

[root@Mars_Server ~]# zip -r -x \*.txt test.zip test1/
 
zip error: Invalid command arguments (nothing to select from)

还是报同样错误!真是奇怪了!

最终,经多次测试,才知道 zip 命令压缩文件时正确的排除方法(-r 表示包含子目录文件):

zip -rx=excludefiles zipfile.zip filepath

比如,要压缩 test 文件目录及目录下的所有文件,而要排除所有 txt 格式,执行如下命令即可:

zip -r -x=*.txt test.zip test1

又比如,我现在要压缩网站文件时排除所有缓存文件:

 zip -rx=zhangge.net/cache/* zhangge.net.zip /wwwroot/zhangge.net

原来,-x 参数是用等号来连接需要排除的通配关键词的!网上分享的参数都是那么简单一句【-x : 不需要压缩的文件】,却没人分享具体使用方法!而 Linux 系统下 man 命令关于 zip 的介绍,居然也不对,真是奇怪,难道就没人用过这个参数么?

唉,估计大伙都使用 tar --excludes 去了。

哦了,本文主要是为了补充一下 zip 排除文件的正确方法,希望能解决你的燃眉之急。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux系统防CC攻击自动拉黑IP增强版Shell脚本

    最新更新:张戈博客已推出功能更强大的轻量级 CC 攻击防御脚本工具 CCKiller==>传送门 前天没事写了一个防 CC 攻击的 Shell 脚本,没想到这么...

    张戈
  • Linux:mv 命令的10个实用例子

    当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么 mv 命令是完成这个任务的首选。本文中总结了十个 Linux mv 命令的实例,希望能给大家带来一...

    张戈
  • Python远程控制模块paramiko遇到的问题及解决记录

    最近一直在开发自动化运维发布平台,底层命令行、文件通道主要基于 paramiko 模块,使用过程中遇到各种各样的问题,本文主要用于收集问题及解决记录,以备后续使...

    张戈
  • ppp 3

    r1:  en  config t  hostname R1  no ip domain-lookup  lin 0  exec-timeout...

    py3study
  • 如何在Ubuntu 14.04上使用Nginx设置密码验证

    设置Web服务器时,通常会希望限制访问的站点部分。Web应用程序通常提供自己的身份验证和授权方法,但如果Web服务器不足或不可用,则可以使用Web服务器本身来限...

    灬半痴
  • 【Hadoop】Linux环境下运行Eclipse并配置搭建Maven环境详细步骤

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • PySpark数据类型转换异常分析

    在使用PySpark的SparkSQL读取HDFS的文本文件创建DataFrame时,在做数据类型转换时会出现一些异常,如下:

    Fayson
  • 【死磕Java并发】-----J.U.C之阻塞队列:PriorityBlockingQueue

    我们知道线程Thread可以调用setPriority(int newPriority)来设置优先级的,线程优先级高的线程先执行,优先级低的后执行。而前面介绍的...

    用户1655470
  • 如何将文件名称批量导入excel

    不给赞赏的话给个赞或者关注下公众号TungHsu吧,不会让你失望的,好玩的数据,免费的软件,学习资料和方法。

    用户1315847
  • C++标准库中copy算法的使用

    std::copy是C++标准库中的算法接口,主要用于两个容器间的复制,据说其效率要优于自己用for循环逐个复制。之前一直非常混淆其中的用法,这里总结了几个例子...

    charlee44

扫码关注云+社区

领取腾讯云代金券