>  기사  >  웹 프론트엔드  >  Node의 zip 압축 및 zip 압축 해제에 대한 간략한 분석(코드 포함)

Node의 zip 압축 및 zip 압축 해제에 대한 간략한 분석(코드 포함)

奋力向前
奋力向前앞으로
2021-09-03 11:14:334497검색

이전 기사 "Amazon EC2 호스트 https(코드 공유)를 활성화하기 위해 certbot에 대해 알아야 할 사항 "에서 Amazon EC2 호스트 https를 활성화하기 위한 certbot에 대해 알아보았습니다. 다음 글에서는 Node.js에서 zip 압축과 zip 압축 해제 방법을 소개합니다.

Node의 zip 압축 및 zip 압축 해제에 대한 간략한 분석(코드 포함)

NodeJS파일(폴더) 압축/압축 해제 방식(zip/unzip)-<code>zip Linux의 관련 명령NodeJS文件(夹)压缩/解压方案(zip/unzip)-Linuxzip相关命令

Use adm-zip

adm-zip支持archiveunarchive一个或多个文件或者整个文件夹的功能,使用非常的简单方便。

var adm_zip = require("adm-zip");

//creating archives
var zip = new adm_zip();
zip.addLocalFolder("./dist");
zip.writeZip("./dist.zip");

//extracting archives
var unzip = new adm_zip("dist.zip");
unzip.extractAllTo("./dist", /*overwrite*/ true);

更多 apihttps://github.com/cthackers/adm-zip

Use JSZip

这个库在使用的时候需要把文件一个个增加到zip对象中,而且需要把内容也手动添加,再使用写文件操作把内存中的zip对象转成物理存储。所以如果是对于一整个文件夹来说,就很麻烦,需要遍历文件夹

var JSZip = require("jszip");
var fs = require("fs");

var zip = new JSZip();

var file_content = fs.readFileSync("archive/a.txt");

zip.file("a.txt", file_content);

var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, { base64: true });

var zipfolder = zip.generate({ type: "nodebuffer" });

fs.writeFile("jszip.zip", zipfolder, function (err) {
  if (err) throw err;
});

JSZip里面也有个folder方法,但它只是用来切换zip对象内部的虚拟路径,比如zip.folder("img").file('a.txt')就是在zip中添加一个img子目录,在下面创建a.txt,效果等同于zip.file("img/a.txt")。这里还需要注意的是,文件的内容都需要手动添加,如果仅仅是zip.file("a.txt");只是在zip对象中创建了内容为空的txt文件,而且它只是存在于内存中,需要写文件操作后才会真正存到磁盘。

更多 APIhttps://github.com/Stuk/jszip

Use archiver and unzip

archiver很强大,支持zip格式tar格式,只需要提供路径就可以压缩已存在的文件夹。

压缩:

// require modules
var fs = require("fs");
var archiver = require("archiver");

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + "/example.zip");
var archive = archiver("zip", {
  zlib: { level: 9 }, // Sets the compression level.
});

// pipe archive data to the file
archive.pipe(output);

// append a file from stream
var file1 = __dirname + "/file1.txt";
archive.append(fs.createReadStream(file1), { name: "file1.txt" });

// append a file from string
archive.append("string cheese!", { name: "file2.txt" });

// append a file from buffer
var buffer3 = Buffer.from("buff it!");
archive.append(buffer3, { name: "file3.txt" });

// append a file
archive.file("file1.txt", { name: "file4.txt" });

// append files from a sub-directory and naming it `new-subdir` within the archive
archive.directory("subdir/", "new-subdir");

// append files from a sub-directory, putting its contents at the root of archive
archive.directory("subdir/", false);

// append files from a glob pattern
archive.glob("subdir/*.txt");

// finalize the archive (ie we are done appending files but streams have to finish yet)
// &#39;close&#39;, &#39;end&#39; or &#39;finish&#39; may be fired right after calling this method so register to them beforehand
archive.finalize();

解压

var fs = require("fs");
var unzip = require("unzip");

fs.createReadStream("archiver-unzip.zip").pipe(
  unzip.Extract({ path: "unarchive" })
);

更多APIhttps://github.com/archiverjs/node-archiver

Linux上zip/unzip命令

apt-get install zip unzip

解压缩zip文件

语  法:unzip [-cflptuvz][-agcjlmnoqsvx][-P 0416a0cf3c48fe3f4569ffb86fe4ec7e][.zip文件][文件][-d da0bd984eba5457db42d205ec9e233d3][-x 70120f5feaf4a4e4f18aa0e9e4edf7f7] 或 unzip [-Z]

补充说明:unzip为.zip压缩文件的解压缩程序。

参  数:

-c将解压缩的结果显示到屏幕上,并对字符做适当的转换。

-f更新现有的文件。

-l显示压缩文件内所包含的文件。

-p-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。

-t检查压缩文件是否正确。

-u-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。

-v执行是时显示详细的信息。

-z仅显示压缩文件的备注文字。

-a对文本文件进行必要的字符转换。

-b不要对文本文件进行字符转换。

-C压缩文件中的文件名称区分大小写。

-j不处理压缩文件中原有的目录路径。

-L将压缩文件中的全部文件名改为小写。

-M将输出结果送到more程序处理。

-n解压缩时不要覆盖原有的文件。

-o不必先询问用户,unzip执行后覆盖原有文件。

-P0416a0cf3c48fe3f4569ffb86fe4ec7e 使用zip的密码选项。

-q执行时不显示任何信息。

-s将文件名中的空白字符转换为底线字符。

-V保留VMS的文件版本信息。

-X解压缩时同时回存文件原来的UID/GID

[.zip 文件]指定.zip压缩文件。

[文件]指定要处理.zip压缩文件中的哪些文件。

-dda0bd984eba5457db42d205ec9e233d3指定文件解压缩后所要存储的目录。

-x70120f5feaf4a4e4f18aa0e9e4edf7f7指定不要处理.zip压缩文件中的哪些文件。

-Z unzip-Z等于执行zipinfo指令。

基本用法是:zip [参数][打包后的文件名] [打包的目录路径]

参数:

-a将文件转成 ASCII 模式

-F尝试修复损坏的压缩文件

-h显示帮助界面

-m

adm-zip 사용

adm-zip은 하나 이상의 파일 또는 전체 폴더에 대해 보관보관 취소 기능을 지원합니다. .사용이 매우 간단하고 편리합니다. 🎜
zip -r test.zip abc.txt dir1
#解压缩:
```sh
unzip test.zip
🎜🎜더 보기 api https://github.com/cthackers/adm-zip🎜🎜

JSZip 사용

🎜이 라이브러리를 사용할 때 zip 객체이며, 콘텐츠를 수동으로 추가해야 하며, 파일 쓰기 작업을 사용하여 메모리에 있는 <code>zip 객체를 물리적 저장소로 변환합니다. 그래서 폴더 전체에 대한 것이라면 매우 번거롭습니다. 폴더를 순회해야 합니다🎜
unzip abc\?.zip
🎜JSZip에도 folder 방법이 있지만, 스위치 zip.folder("img").file('a.txt')와 같은 code>zip 객체 내부의 가상 경로는 zip <code>img 하위 디렉터리, 아래에 a.txt 생성, 효과는 zip.file("img/a.txt")와 동일 >. 또한 파일 내용을 수동으로 추가해야 한다는 점에 유의해야 합니다. zip.file("a.txt")인 경우 zip으로 생성됩니다. 객체 콘텐츠는 빈 txt 파일이며 메모리에만 존재하며 실제로 디스크에 저장되기 전에 파일에 기록되어야 합니다. 🎜🎜🎜추가 API https://github.com/Stuk/jszip🎜🎜🎜아카이버 사용 및 압축 해제🎜🎜archiver는 매우 강력하며 zip 형식 을 지원합니다. tar 형식의 경우 기존 폴더를 압축하기 위한 경로만 제공하면 됩니다. 🎜🎜압축: 🎜
unzip -v test.zip
🎜Decompression🎜
unzip -t test.zip
🎜🎜더 많은 API https://github.com/archiverjs/node-archiver🎜🎜

Linux의 zip/unzip 명령

unzip -j music.zip
🎜Unzipzip File🎜🎜🎜 구문: unzip [-cflptuvz][-agcjlmnoqsvx][-P cb1ebc435675187bdcfb539b370c2e37][.zip 파일][file][-d 6f655ecf17a4459bb2d05758ed836e3d][-x 87e65035e8f0fd8ab84c8df883f42b7e 또는 unzip [-Z]🎜🎜🎜추가 설명: <code>unzip은 .zip 압축 파일의 압축 해제 프로그램입니다. 🎜🎜매개변수: 🎜🎜-c는 압축 해제 결과를 화면에 표시하고 문자를 적절하게 변환합니다. 🎜🎜-f기존 파일을 업데이트합니다. 🎜🎜-l압축 파일에 포함된 파일을 표시합니다. 🎜🎜-p-c 매개변수와 유사하지만 압축 해제 결과를 화면에 표시하지만 변환을 수행하지는 않습니다. 🎜🎜-t 압축파일이 맞는지 확인해보세요. 🎜🎜-u-f 매개변수와 유사하지만 기존 파일을 업데이트하는 것 외에도 압축 파일의 다른 파일도 디렉터리에 압축 해제됩니다. 🎜🎜-v를 실행하면 자세한 정보가 표시됩니다. 🎜🎜-z압축 파일의 주석 텍스트만 표시합니다. 🎜🎜-a 텍스트 파일에서 필요한 문자 변환을 수행합니다. 🎜🎜-b텍스트 파일에서는 문자 변환을 수행하지 않습니다. 🎜🎜-C압축 파일의 파일 이름은 대소문자를 구분합니다. 🎜🎜-j는 압축 파일의 원래 디렉터리 경로를 처리하지 않습니다. 🎜🎜-L 압축 파일의 모든 파일 이름을 소문자로 변경합니다. 🎜🎜-M은 처리를 위해 출력 결과를 more 프로그램으로 보냅니다. 🎜🎜-n압축 해제 시 원본 파일을 덮어쓰지 마세요. 🎜🎜-o사용자에게 먼저 물어볼 필요가 없습니다. unzip은 실행 후 원본 파일을 덮어씁니다. 🎜🎜-P3b0c6630ad8a929436e205e60a78d070 zip의 비밀번호 옵션을 사용하세요. 🎜🎜-q를 실행하면 어떤 정보도 표시되지 않습니다. 🎜🎜-s파일 이름의 공백 문자를 밑줄 문자로 변환합니다. 🎜🎜-VVMS의 파일 버전 정보를 유지합니다. 🎜🎜-X는 압축을 풀 때 파일의 원본 UID/GID도 저장합니다. 🎜🎜[.zip 파일].zip 압축 파일을 지정합니다. 🎜🎜[file].zip 압축 파일에서 처리할 파일을 지정합니다. 🎜🎜-d<directory></directory>압축 해제 후 파일이 저장될 디렉터리를 지정합니다. 🎜🎜-x<file>는 <code>.zip 압축 파일에서 처리하지 말아야 할 파일을 지정합니다. 🎜🎜-Z unzip-Zzipinfo 명령을 실행하는 것과 동일합니다. 🎜🎜🎜기본 사용법은 다음과 같습니다: zip [매개변수][패킹된 파일 이름] [패킹된 디렉터리 경로]🎜🎜🎜매개변수: 🎜🎜-a파일을 ASCII 모드로 변환🎜🎜- F손상된 압축 파일 복구를 시도해보세요🎜🎜-h도움말 인터페이스 표시🎜🎜-m파일 압축 후 소스 파일 삭제🎜

-n特定字符串 不压缩具有特定字尾字符串的文件

-o将压缩文件内的所有文件的最新变动时间设为压缩时候的时间

-q安静模式,在压缩的时候不显示指令的执行过程

-r将指定的目录下的所有子目录以及文件一起处理

-S包含系统文件和隐含文件(S 是大写)

范 例:

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。 压缩文件abc.txt和一个目录dir1,名字test.zip

zip -r test.zip abc.txt dir1
#解压缩:
```sh
unzip test.zip

目录下有abc1.zipabc2.zipabc3.zip,使用通配符

unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。 不解压,只查看内容

unzip -v test.zip

验证zip文件完成性,查看网上下的包包是不是已经下载完了

unzip -t test.zip

我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

unzip -j music.zip

推荐学习:JS视频教程

위 내용은 Node의 zip 압축 및 zip 압축 해제에 대한 간략한 분석(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 chuchur.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제