之前的文章《你值得了解的certbot開啟亞馬遜EC2主機https(程式碼分享)》中,給大家了解了certbot開啟亞馬遜EC2主機https。以下這篇文章給大家了解Node中zip壓縮和zip解壓縮,我們一起看看怎麼做。
NodeJS
檔案(夾)壓縮/解壓縮方案(zip/unzip)-Linux
上# zip
相關指令
adm-zip
支援archive
和unarchive
一個或多個檔案或整個資料夾的功能,使用非常簡單的方便。
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
這個庫在使用的時候需要把檔案一個個增加到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) // 'close', 'end' or 'finish' 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
apt-get install zip unzip
解壓縮zip
檔
語法:unzip [-cflptuvz][-agcjlmnoqsvx][-P f5b6f42419b005b3bea3fab3622d424d][-x 03e22e6bb4c5ce6b1a1162d3a4e7cfa5] 或unzip [-Z]
#補充說明:unzip為.zip
壓縮檔案的解壓縮程式。
參 數:
-c
將解壓縮的結果顯示到螢幕上,並對字元進行適當的轉換。
-f
更新現有的檔案。
-l
顯示壓縮檔案內所包含的檔案。
-p
與-c
參數類似,會將解壓縮的結果顯示到螢幕上,但不會執行任何的轉換。
-t
檢查壓縮檔案是否正確。
-u
與-f
參數類似,但除了更新現有的檔案外,也會將壓縮檔案中的其他檔案解壓縮到目錄中。
-v
執行是時顯示詳細的資訊。
-z
僅顯示壓縮檔案的備註文字。
-a
對文字檔案進行必要的字元轉換。
-b
不要對文字檔案進行字元轉換。
-C
壓縮檔案中的檔案名稱區分大小寫。
-j
不處理壓縮檔案中原有的目錄路徑。
-L
將壓縮檔案中的全部檔案名稱改為小寫。
-M
將輸出結果送到more
程式處理。
-n
解壓縮時不要覆寫原有的檔案。
-o
不必先詢問用戶,unzip
執行後會覆寫原有檔案。
-P
03887615cecb8509ab8ca954e391fd97 使用zip
的密碼選項。
-q
執行時不顯示任何資訊。
-s
將檔案名稱中的空白字元轉換為底線字元。
-V
保留VMS
的檔案版本資訊。
-X
解壓縮時同時回存檔案原來的UID/GID
。
[.zip 檔案]
指定.zip
壓縮檔案。
[檔案]
指定要處理.zip
壓縮檔案中的哪些檔案。
-dfcb47d58dc8a88646a4e66ec1a1bbd22
指定檔案解壓縮後所要儲存的目錄。
-x6390f696e6fb31a54dfd53b86357a260
指定不要處理.zip
壓縮檔案中的哪些檔案。
-Z unzip-Z
等於執行zipinfo
指令。
基本用法是: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.zip
,abc2.zip
和abc3.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中文網其他相關文章!