Maison > Article > interface Web > Une brève analyse de la compression zip et de la décompression zip dans Node (avec code)
Dans l'article précédent "Ce que vous devez savoir sur certbot pour activer l'hôte Amazon EC2 https (partage de code) ", nous avons découvert certbot pour activer l'hôte Amazon EC2 https. L'article suivant vous présentera la compression zip et la décompression zip dans Node. Voyons comment procéder.
NodeJS
Schéma de compression/décompression de fichier (dossier)(zip/unzip)-<code>zip
commandes liées sous LinuxNodeJS
文件(夹)压缩/解压方案(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 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
执行后覆盖原有文件。
-P
0416a0cf3c48fe3f4569ffb86fe4ec7e 使用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
prend en charge les fonctions archive
et unarchive
pour un ou plusieurs fichiers ou un dossier entier . Très simple et pratique à utiliser. 🎜zip -r test.zip abc.txt dir1 #解压缩: ```sh unzip test.zip🎜🎜Plus d'API https://github.com/cthackers/adm-zip🎜🎜
zip, et le contenu doit être ajouté manuellement, puis l'opération d'écriture de fichier est utilisée pour convertir l'objet <code>zip
dans la mémoire en stockage physique. Donc, si c'est pour un dossier entier, c'est très gênant. Vous devez parcourir le dossier🎜unzip abc\?.zip🎜
JSZip
a également une méthode folder
, mais elle n'est utilisée que pour switch zip, tel que zip.folder("img").file('a.txt')
est ajouté dans zip Un sous-répertoire <code>img
, créez a.txt
ci-dessous, l'effet est équivalent à zip.file("img/a.txt")
. Il convient également de noter ici que le contenu du fichier doit être ajouté manuellement. S'il s'agit simplement de zip.file("a.txt")
; Objet Le contenu est un fichier txt
vide, il n'existe que dans la mémoire et doit être écrit dans le fichier avant d'être réellement enregistré sur le disque. 🎜🎜🎜Plus d'API https://github.com/Stuk/jszip🎜🎜🎜Utilisez l'archiveur et décompressez🎜🎜archiver
est très puissant et prend en charge le format zip
tar
, il vous suffit de fournir le chemin pour compresser un dossier existant. 🎜🎜Compression : 🎜unzip -v test.zip🎜Décompression🎜
unzip -t test.zip🎜🎜Plus d'API https://github.com/archiverjs/node-archiver🎜🎜
unzip -j music.zip🎜Décompresser
zip Fichier🎜🎜🎜Syntaxe : décompresser [-cflptuvz][-agcjlmnoqsvx][-P 43666b0777775e6257a48260fd58c9ae][fichier .zip][fichier][-d 8f22daf8eb4b431c45988a7155d9d2ec][-x 5d62f960439c8badecd6097bae925838] ou unzip [-Z]🎜🎜🎜Explication supplémentaire : <code>unzip est un programme de décompression pour les fichiers compressés .zip
. 🎜🎜Paramètres : 🎜🎜-c
affiche le résultat de la décompression à l'écran et convertit les caractères de manière appropriée. 🎜🎜-f
Mettre à jour les fichiers existants. 🎜🎜-l
Affiche les fichiers contenus dans le fichier compressé. 🎜🎜-p
est similaire au paramètre -c
Il affichera le résultat de la décompression à l'écran, mais n'effectuera aucune conversion. 🎜🎜-t
Vérifiez si le fichier compressé est correct. 🎜🎜-u
est similaire au paramètre -f
, mais en plus de mettre à jour les fichiers existants, les autres fichiers du fichier compressé seront également décompressés dans le répertoire. 🎜🎜-v
affiche des informations détaillées lors de l'exécution. 🎜🎜-z
Affiche uniquement le texte du commentaire du fichier compressé. 🎜🎜-a
Effectuez la conversion des caractères nécessaire sur les fichiers texte. 🎜🎜-b
N'effectuez pas de conversion de caractères sur les fichiers texte. 🎜🎜-C
Les noms de fichiers dans les fichiers compressés sont sensibles à la casse. 🎜🎜-j
ne traite pas le chemin du répertoire d'origine dans le fichier compressé. 🎜🎜-L
Changez tous les noms de fichiers du fichier compressé en minuscules. 🎜🎜-M
envoie les résultats de sortie au programme more
pour traitement. 🎜🎜-n
N'écrasez pas le fichier original lors de la décompression. 🎜🎜-o
Pas besoin de demander d'abord à l'utilisateur, unzip
écrasera le fichier original après l'exécution. 🎜🎜-P
16398288f261faa759d47caefd275b5c Utilisez l'option de mot de passe de zip
. 🎜🎜-q
n'affiche aucune information lors de l'exécution. 🎜🎜-s
Convertit les caractères d'espacement dans les noms de fichiers en caractères de soulignement. 🎜🎜-V
conserve les informations de version du fichier de VMS
. 🎜🎜-X
enregistrera également le UID/GID
original du fichier lors de la décompression. 🎜🎜[.zip file]
Spécifie le fichier compressé .zip
. 🎜🎜[file]
Spécifie quels fichiers du fichier compressé .zip
doivent être traités. 🎜🎜-d7b799fe73e35dcfdc019b13f54de80e5
Spécifie le répertoire où le fichier sera stocké après décompression. 🎜🎜-xa49806b1b35266a135cf3c07a1b250a6
spécifie quels fichiers du fichier compressé .zip
ne doivent pas être traités. 🎜🎜-Z unzip-Z
équivaut à exécuter la commande zipinfo
. 🎜🎜🎜L'utilisation de base est : zip [paramètres][nom du fichier compressé] [chemin du répertoire compressé]🎜🎜🎜Paramètres : 🎜🎜-a
Convertir le fichier en mode ASCII🎜🎜-F
Essayez de réparer le fichier compressé endommagé🎜🎜-h
Affichez l'interface d'aide🎜🎜-m
Après avoir compressé le fichier, supprimez le fichier source🎜-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视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!