关于zip:Linux-zip-和-unzip-命令使用案例

zip 是用于创立存档文件或压缩文件的命令。这使您能够压缩文件并为硬盘驱动器或可挪动驱动器上的其余文件创建更多空间。此外,将文件 / 目录压缩使它们更便宜,更易于上传,下载甚至通过电子邮件发送它们。有压缩就有解压缩,咱们应用 unzip 命令来解压缩文件并独自拜访它们。 在开始探讨 zip 和 unzip 命令之前,让咱们看看如何从命令行装置这些命令 装置 zip 和 unzip 命令在 Ubuntu / Debian / Linux Mint 上装置,运行上面的命令 $ sudo apt install -y zip unzipor$ sudo apt-get install -y zip unzip在 CentOS / RHEL / Fedora 上装置,运行上面的命令 $ sudo yum install -y zip unzipor$ sudo dnf install -y zip unzipZip 命令压缩文件就像ABC一样简略,语法如下 $ zip OPTIONS archive.zip file 在你持续之前,有几点须要思考 在压缩文件之前,须要对正在压缩的文件和目录地位具备写权限解压缩或提取文件时,用户领有文件 / 目录所有权(1) 应用 zip 命令压缩单个文件和多个文件假如当前目录中有文件 reports1.txt,将其压缩到名为 reports.zip 的归档文件中。 ...

November 4, 2022 · 2 min · jiezi

关于zip:libzip开发笔记一libzip库介绍编译和工程模板

若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111876926长期继续带来更多我的项目与技术分享,征询请加QQ:21497936、微信:yangsir198808 红瘦子(红模拟)的博文大全:开发技术汇合(蕴含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中…(点击传送门) Qt开发专栏:三方库开发技术 前言 Qt应用一些压缩解压性能,抉择libzip库,libzip库比拟原始,也是很多其余库的根底撑持库。 libzip libzip是一个C库,用于读取,创立和批改zip档案。能够从数据缓冲区,文件或间接从其余zip归档文件间接复制的压缩数据中增加文件。在不敞开存档的状况下所做的更改能够还原。 以后版本是1.7.3,于2020年7月15日公布。 官网:https://libzip.org/ QQ群:1047134658(点击“文件”搜寻“libzip”,群内与博文同步更新) libzip编译步骤一:解压 步骤二:Cmake配置(vs2017 x64版本) 须要zlib,之前曾经编译过vs2017 x64版本的zlib了,导入再配置 步骤三:生成工程 步骤四:关上VS2017编译 步骤五:装置install 模块化 补充:查看命令行工具帮忙和源码辅助开发ziptool.exe -husage: ziptool.exe [-ceghnrst] [-l len] [-o offset] archive command1 [args] [command2 [args] ...]Supported options are: -c check consistency -e error if archive already exists (only useful with -n) -g guess file name encoding (for stat) -h display this usage -l len only use len bytes of file -n create archive if it doesn't exist -o offset start reading file at offset -r print raw file name encoding without translation (for stat) -s follow file name convention strictly (for stat) -t disregard current archive contents, if anySupported commands and arguments are: add name content add file called name using content add_dir name add directory add_file name file_to_add offset len add file to archive, len bytes starting from offset add_from_zip name archivename index offset len add file from another archive, len bytes starting from offset cat index output file contents to stdout count_extra index flags show number of extra fields for archive entry count_extra_by_id index extra_id flags show number of extra fields of type extra_id for archive entry delete index remove entry delete_extra index extra_idx flags remove extra field delete_extra_by_id index extra_id extra_index flags remove extra field of type extra_id get_archive_comment show archive comment get_extra index extra_index flags show extra field get_extra_by_id index extra_id extra_index flags show extra field of type extra_id get_file_comment index get file comment get_num_entries flags get number of entries in archive name_locate name flags find entry in archive print_progress print progress during zip_close() rename index name rename entry replace_file_contents index data replace entry with data set_archive_comment comment set archive comment set_extra index extra_id extra_index flags value set extra field set_file_comment index comment set file comment set_file_compression index method compression_flags set file compression method set_file_dostime index time date set file modification time and date (DOS format) set_file_encryption index method password set file encryption method set_file_mtime index timestamp set file modification time set_file_mtime_all timestamp set file modification time for all files set_password password set default password for encryption stat index print information about entrySupported flags are: 0 (no flags) C ZIP_FL_NOCASE c ZIP_FL_CENTRAL d ZIP_FL_NODIR l ZIP_FL_LOCAL u ZIP_FL_UNCHANGEDSupported compression methods are: default deflate storeSupported encryption methods are: none AES-128 AES-192 AES-256 PKWAREThe index is zero-based. ...

January 4, 2021 · 2 min · jiezi

关于zip:ZIP-也能边下载边解压流式解压技术揭秘

简介: 对于一个 ZIP 文件,因为规范的解压形式总是从读取文件的开端开始的,因而必须下载残缺个 ZIP 解压后能力拜访。当用户通过网络拜访 ZIP 文件时,下载解压所带来的耗时将大大降低用户体验。那么能不能边下载边解压呢?阿里巴巴娱乐技术 喻远将介绍 ZIP 流式解压的原理和技术实现门路。 关上网络上的 ZIP 文件须要几步?下载,解压,拿到所有文件。面对一个 ZIP,能不能「边下边播」、「按需下载」? 往年 6 月,优酷绘本技术团队开发出新的解压形式——ZIP 流式解压技术,并胜利利用在优酷绘本秒开我的项目中,30M+ 绘本均匀加载时长只需 0.91s,加载耗时比传统的解压形式升高了 88.3%,让用户的浏览体验直线晋升。理论比照成果如下: 本文将介绍 ZIP 流式解压的原理和技术实现门路,心愿为大家带来启发,将 ZIP 流式解压技术更多的利用到业务中。 一 什么是ZIPZIP 是一种文件格式,定义了如何将多个文件、数据块组织在一起造成一个残缺的文件。例如咱们常见的 .apk,.ipa,.sketch,都是ZIP文件。通常程序是这样创立 ZIP 文件的: 压缩单个文件造成单文件数据块;在数据块前后增加文件形容信息;对每个待压缩的文件反复以上步骤后,拼接所有数据造成更大的数据块;提取所有文件形容信息,生成一份「文件目录」,附在最初一个数据块的尾部。 咱们将文件前部形容信息称为 Local File Header,文件后部形容信息称为 Data Descriptor, 被压缩的文件自身称为 File Data,将最初的文件目录称为 Central Directory。以上所有合在一起,就是一个规范的 ZIP 文件。如下图: 一个规范的解压形式总是从读取 ZIP 文件开端开始的,咱们以解压上图的 File Data 1 为例: 首先在 ZIP 文件开端找到 Central Directory 数据块;在 Central Directory 数据块中找到 File Header 1;从 File Header 1 中读取 Local File Header 1 的偏移量和 File Data 1 的相干信息;依据偏移量找到 Local File Header 1;读取 Local File Header 1;解密 File Data 1(如果须要);解压 File Data 1;读取 Data Descriptor 1;应用 File Header 1 中保留的 CRC-32 做校验步骤 7 中计算的 CRC-32,以确保解压后的数据完整性。规范解压形式存在的有余能够发现,规范的解压强依赖尾部的 Central Directory。当 ZIP 文件存储在 cdn 上时,哪怕咱们只想拜访其中的一个文件,也必须下载整个 ZIP 解压后才可拜访。如果 ZIP 文件有 100 MB,然而咱们只须要拜访其中的某一个 10 KB 的文件,那么下载整个 ZIP 将是对流量的微小节约。 ...

September 9, 2020 · 2 min · jiezi

彻底弄懂为什么不能把栈上分配的数组字符串作为返回值

背景最近准备一个教程,案例的过程中准备了如下代码碎片,演示解析http scheme #include <stdio.h>#include <stdlib.h>#include <string.h>char *parse_scheme(const char *url){ char *p = strstr(url,"://"); return strndup(url,p-url);}int main(){ const char *url = "http://static.mengkang.net/upload/image/2019/0907/1567834464450406.png"; char *scheme = parse_scheme(url); printf("%s\n",scheme); free(scheme); return 0;}上面是通过strndup的方式,背后也依托了malloc,所以最后也需要free。有人在微信群私信parse_scheme能用char []来做返回值吗?我们知道栈上的数组也能用来存储字符串,那我们可以改写成下面这样吗? char *parse_scheme(const char *url){ char *p = strstr(url,"://"); long l = p - url + 1; char scheme[l]; strncpy(scheme, url, l-1); return scheme;}大多数人都知道不能这样写,因为返回的是栈上的地址,当从该函数返回之后,那段栈空间的操作权也释放了,当再次使用该地址的时候,值就是不确定的了。 那我们今天就一起探讨下出现这样情况的背后的真正原理。 基础预备每个函数运行的时候因为需要内存来存放函数参数以及局部变量等,需要给每个函数分配一段连续的内存,这段内存就叫做函数的栈帧(Stack Frame)。因为是一块连续的内存地址,所以叫帧;为什么叫要加一个栈呢?想必大家都熟悉了函数调用栈,为什么叫函数调用栈呢?比如下面的表达式 array_values(explode(",",file_get_contents(...)));函数的执行顺序是最内层的函数最先执行,然后依次返回执行外层的函数。所以函数的执行就是利用了栈的数据结构,所以就叫栈帧。 x86_64 cpu上的 rbp 寄存器存函数栈底地址,rsp 寄存器存函数栈顶地址。 实验#include <stdio.h>void foo(void){ int i; printf("%d\n", i); i = 666;}int main(void){ foo(); foo(); return 0;}$gcc -g 2.c$./a.out0666为什么第二次调用foo函数输出的结果都是上次函数调用的赋值呢?先看下反汇编之后的代码 ...

October 15, 2019 · 2 min · jiezi

mac-zip-压缩文件-unzip解压文件

mac 压缩文件zip 压缩文件zip -q -r -e -m -o myfile.zip someThing 各选项的含义分别为:选项说明-q表示不显示压缩进度状态-r表示子目录子文件全部压缩为zip;这部分比较重要,不然的话只有something这个文件夹被压缩,里面的没有被压缩进去-e表示你的压缩文件需要加密,终端会提示你输入密码的;还有种加密方法,这种是直接在命令行里做的。例如:zip -r -P Password01! modudu.zip SomeDir, 就直接用Password01!来加密modudu.zip了-m表示压缩完删除原文件-o表示设置所有被压缩文件的最后修改时间为当前压缩时间当跨目录的时候是这么操作的zip -q -r -e -m -o '\user\someone\someDir\someFile.zip' '\users\someDir' unzip 解压文件语法:unzip [选项] 压缩文件名.zip 各选项的含义分别为:选项说明-x文件列表 解压缩文件,但不包括指定的file文件。-v查看压缩文件目录,但不解压。-t测试文件有无损坏,但不解压。-d目录 把压缩文件解到指定目录下。-z只显示压缩文件的注解。-n不覆盖已经存在的文件。-o覆盖已存在的文件且不要求用户确认。-j不重建文档的目录结构,把所有文件解压到同一目录下。1、将压缩文件text.zip在当前目录下解压缩。unzip text.zip 2、将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。unzip -n text.zip -d /tmp 3、查看压缩文件目录,但不解压。unzip -v text.zip

June 14, 2019 · 1 min · jiezi

JS/TS语言zip压缩解压缩三方库及其使用

Laya项目里,要用typescript对AS3写的配置文件压缩打包工具导出的文件解压缩。怎么办,上github找一个库,地址如下https://github.com/imaya/zlib.js下载找到的zlib.js或zlib.min.js文件自己编写zlib.min.d.ts文件,代码如下export namespace Zlib { class Inflate { constructor(data:any); decompress(): any; } class Deflate { constructor(data:any); compress():any; }}我的是ts版Laya项目,所以,把zlib.min.js和zlib.min.d.ts文件放到项目里这种工具性质的代码,最好写成上下文无关的静态类方法。export class ByteUtil{ * 压缩 二进制数据 * @param bytes * @returns Array.<number> or Uint8Array / public static compress(bytes:Laya.Byte):any { var byte8 = new Uint8Array(bytes.buffer); var defate = new Zlib.Deflate(byte8); var compressed = defate.compress(); return compressed; } /* * 解压 二进制数据 * @param compressed Array.<number> or Uint8Array */ public static uncompress(compressed: any): Laya.Byte { var inflate = new Zlib.Inflate(compressed); var plain = inflate.decompress(); var plainByte: Laya.Byte = new Laya.Byte(plain); return plainByte; }}好了。AS3工具压缩导出的配置文件joeng.data,以Laya.Loader.BUFFER的形式加载, let configData:Laya.Byte = new Laya.Byte(); configData.writeArrayBuffer(Laya.Loader.getRes(“res/pre/joeng.data”)); let configUint8Array = new Uint8Array(configData.buffer); configData = ByteUtil.uncompress(configUint8Array); configData.pos = 0; let configStr:string = configData.getUTFString();本文参考自https://blog.csdn.net/sjt2238… ...

April 16, 2019 · 1 min · jiezi

通过 Node 批量下载文件到本地(多文件)

最近在做一个文件下载的功能,这里把做的过程中用的技术和坑简要总结下。上篇文章《通过 JavaScript 下载文件到本地(单文件)》说了下如何下载单文件,这篇主要说下如何做多文件的批量下载多文件分别处理如果文件数量可控,对于下载出来的文件格式无要求,可以用最简单的办法,直接遍历文件,分别给每个下载链接创建一个单文件的download或者iframe下载链接。zip包批量下载虽然说可以遍历所有文件,然后去批量下载单个文件,但是这种体验毕竟不太好,最常见的做法是把批量的文件下载并打包到zip中。所以首先的一个实现思路是:在代理服务里,先去遍历所有的文件去请求文件数据,然后压缩到zip包中,然后再把zip包返回给客户端。这么做对于下载量数据比较小时ok,但是如果批量文件特别多特别大时,用户要等后台把所有的数据都请求到并且都打包都压缩包里,前端才能有反馈,这个时间可能会耗时很长,用户体验可能很差。在同事的前期调研时,有说这里可以做一个流式的边压缩边下载的能力,大致的思路是,chunk回包,加流式压缩。……let fileCounter = 0;const zippedFilename = encodeURIComponent(downloadData.name);const list = downloadData.list || [];const header = { ‘Content-Type’: ‘application/x-zip’, ‘Pragma’: ‘public’, ‘Expires’: ‘0’, ‘Cache-Control’: ‘private, must-revalidate, post-check=0, pre-check=0’, ‘Content-disposition’: ‘attachment; filename="’ + zippedFilename + ‘"’, ‘Transfer-Encoding’: ‘chunked’, ‘Content-Transfer-Encoding’: ‘binary’};res.writeHead(200, header);archive.store = true;archive.pipe(res);list.map(item => { fileCounter++; let inStream = request.get(item.downLoadUrl); let name = item.fileName; let length = 0; inStream.on(‘response’, function(awsData) { archive.append(inStream, { name: name }); }).on(‘data’, function(data) { length += data.length; }).on(’error’, function(e) { console.error(name + ‘-error’, e); }).on(’end’, function(endData) { fileCounter–; if (fileCounter < 1) { archive.finalize(); } });});archive.on(’error’, function(err) { throw err;});archive.on(‘finish’, function(err) { return res.end();});……当然中间还有些细节需要处理:比如中文文件名的问题,是否需要下载文件总大小做限制,是否会出现文件不存在等等情况。 ...

March 15, 2019 · 1 min · jiezi

Nodejs批量下载文件(图片、视频等)

最近在做一个文件下载的功能,这里把做的过程中用的技术和坑简要总结下1. 单文件下载1.1 同源单文件针对单文件的情况下,同源的文件,可以通过 标签的 download 属性下载文件 const elt = document.createElement(‘a’); elt.setAttribute(‘href’, url); elt.setAttribute(‘download’, ‘file.png’); elt.style.display = ’none’; document.body.appendChild(elt); elt.click(); document.body.removeChild(elt);但是这个方案并不适用于非同源的资源,此时它相当于普通的超链接,点击会跳转到资源页面,而不是下载。1.2 非同源图片针对于非同源图片,可以考虑使用 canvas 将图片转换成 base64 编码之后再通过 标签的 download 属性下载function downloadPic(url) { const img = new Image; const canvas = document.createElement(‘canvas’); const ctx = canvas.getContext(‘2d’); img.onload = function() { canvas.width = this.width; canvas.height = this.height; ctx.drawImage(this, 0, 0); const elt = document.createElement(‘a’); elt.setAttribute(‘href’, canvas.toDataURL(‘image/png’)); elt.setAttribute(‘download’, ‘file.png’); elt.style.display = ’none’; document.body.appendChild(elt); elt.click(); document.body.removeChild(elt); }; img.crossOrigin = ‘anonymous’; img.src = url;} ...

March 14, 2019 · 1 min · jiezi