#node.js #typescript #archiverjs
#node.js #typescript #archiverjs
Вопрос:
Я использую архиватор для архивирования двух папок 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
обходы x
и y
в BFS-порядке).
x/x1
x/x2
y/y1
y/y2
x/x1/x11.txt
x/x2/x21.txt
y/y1/y11.txt
Я бы хотел заархивировать x
и y
в DFS-порядок так unzip -l
показывает:
x/x1
x/x1/x11.txt
x/x2
x/x2/x21.txt
y/y1
y/y1/y11.txt
y/y2
Как я могу контролировать порядок архивированных каталогов и файлов?
Ответ №1:
Вы можете использовать glob()
метод вместо directory()
сопоставления файлов с использованием шаблона глобуса.
Это добавит файлы в 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();
Комментарии:
1. Спасибо за предложение, но zip, к сожалению, выглядит так же : ((
2. черт возьми, это работает так, как вы ожидаете, на моей стороне с
glob()
3. Хм… очень странно.
4. Я попробовал
zip.glob('x/**/*'); zip.glob('y/**/*');
, и это работает, как ожидалось :)) Спасибо!