Node JS只复制某些文件

时间:2016-10-24 08:37:33

标签: javascript node.js npm fs

我有一个像这样的输入目录:

@color/accent

我试图生成以下内容:

resouces
├── a.avi
├── b.mp3
├── c.pdf
├── d.png
└── ...

我正在使用fs-extra npm模块。这是我的代码:

resouces
├── audio
    └── *.mp3
├── video
    └── *.avi
└── ...

我不知道如何正确使用过滤器选项(复制调用中的第三个参数)仅将某些文件复制到我的输出目录。

提前感谢!

3 个答案:

答案 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可以工作。