如何用"archiver.js"控制压缩目录和文件的顺序?
How to control the order of zipped directories and files with "archiver.js"?
我正在使用 archiver 压缩两个文件夹 x
和 y
:
const out = ... // file write stream
...
const zip = archiver('zip', {});
zip.on('error', (err: Error) => { throw err; });
zip.pipe(out);
zip.directory('x', 'x');
zip.directory('y', 'y');
zip.finalize();
zip 文件没问题,但是 unzip -l
显示 x
和 y
交错。
(看起来 archiver
按 BFS 顺序遍历 x
和 y
。
x/x1
x/x2
y/y1
y/y2
x/x1/x11.txt
x/x2/x21.txt
y/y1/y11.txt
我想以 DFS 顺序压缩 x
和 y
,因此 unzip -l
显示:
x/x1
x/x1/x11.txt
x/x2
x/x2/x21.txt
y/y1
y/y1/y11.txt
y/y2
如何控制压缩目录和文件的顺序?
您可以使用 glob()
方法而不是 directory()
来匹配使用 glob 模式的文件。
它将在 DFS-order
中附加文件。
说明应如下所示:
zip.glob('{x,y}/**/*');
完整代码示例:
import fs = require('fs');
import archiver = require('archiver');
let out = fs.createWriteStream(process.cwd() + '/example.zip');
const zip = archiver('zip', {});
zip.on('error', (err: Error) => { throw err; });
zip.pipe(out);
zip.glob('{x,y}/**/*');
zip.finalize();
我正在使用 archiver 压缩两个文件夹 x
和 y
:
const out = ... // file write stream
...
const zip = archiver('zip', {});
zip.on('error', (err: Error) => { throw err; });
zip.pipe(out);
zip.directory('x', 'x');
zip.directory('y', 'y');
zip.finalize();
zip 文件没问题,但是 unzip -l
显示 x
和 y
交错。
(看起来 archiver
按 BFS 顺序遍历 x
和 y
。
x/x1
x/x2
y/y1
y/y2
x/x1/x11.txt
x/x2/x21.txt
y/y1/y11.txt
我想以 DFS 顺序压缩 x
和 y
,因此 unzip -l
显示:
x/x1
x/x1/x11.txt
x/x2
x/x2/x21.txt
y/y1
y/y1/y11.txt
y/y2
如何控制压缩目录和文件的顺序?
您可以使用 glob()
方法而不是 directory()
来匹配使用 glob 模式的文件。
它将在 DFS-order
中附加文件。
说明应如下所示:
zip.glob('{x,y}/**/*');
完整代码示例:
import fs = require('fs');
import archiver = require('archiver');
let out = fs.createWriteStream(process.cwd() + '/example.zip');
const zip = archiver('zip', {});
zip.on('error', (err: Error) => { throw err; });
zip.pipe(out);
zip.glob('{x,y}/**/*');
zip.finalize();