我有一个像这样的输入目录:
@color/accent
我试图生成以下内容:
resouces
├── a.avi
├── b.mp3
├── c.pdf
├── d.png
└── ...
我正在使用fs-extra npm模块。这是我的代码:
resouces
├── audio
└── *.mp3
├── video
└── *.avi
└── ...
我不知道如何正确使用过滤器选项(复制调用中的第三个参数)仅将某些文件复制到我的输出目录。
提前感谢!
答案 0 :(得分:1)
使用此gist从文件夹中有选择地复制文件并提供特定的输出名称
const fs = require('fs-extra');
const folders = [
{
path: './build/static/css',
regex: /^(main).[\w]*.css$/,
outputFile: '../public-pages/style/sme.css'
},
{
path: './build/static/js',
regex: /^(main).[\w]*.js$/,
outputFile: '../public-pages/js/sme.js'
}
];
/*
following code will copy files from ./build/static/css matching the regex pattern to new location specified by output file
*/
folders.forEach(folder => {
fs.readdirSync(folder.path).forEach(file => {
if (folder.regex.test(file)) {
console.log(`copying file ${file}`);
fs.copy(`${folder.path}/${file}`, folder.outputFile)
.then(() => console.log('success!'))
.catch(err => console.error(err));
}
});
});
答案 1 :(得分:0)
Looking at the docs它看起来好像你可以使用globs(正如你在你的例子中所做的那样)。您可以使用返回布尔值的函数,也可以使用正则表达式。
例如,如果你想匹配所有的mp3或avis那么你可以做;
fse.copy(inDir, outDir, /.*(.mp3|.avi)$/, (err) => { })
答案 2 :(得分:0)
最后我明白了:
正如@Jivings所说,我只需要一个正则表达式作为过滤器。但是,问题是来自fse的copy方法使用ncp,现在它似乎有一个带过滤器的bug。使用copySync可以工作。