node ncp filter无法正常工作

时间:2017-08-23 14:37:36

标签: node.js copy filesystems

我正在尝试通过节点ncp library过滤文件,但它的过滤器无效。 一旦过滤器得到错误返回它就会破坏整个复制过程

   ncp(source, destination, options, function (err) {
            if (err) {
                console.error("backup error:", err);

            }
            console.log("Backup of done!');


        });

 var options = {

           filter: function (file) {
                console.log("copying file:", file);

                var res = file.toString().indexOf("\\testdrive") !== -1;
                console.log("res:", res);

                return !res;

            },
            //filter: new RegExp("\\testdrive"),//Or RegEx intance
        };

因此,一旦过滤函数或RegEx实例得到错误,结果就是整个复制中断

  

options.filter - 一个RegExp实例,测试每个文件名以确定是否复制它,或者采用单个参数的函数:复制文件名,返回true或false,确定是否复制文件

2 个答案:

答案 0 :(得分:0)

找到解决方案: 好像过滤器RegExp / function不仅会被调用ncp应该复制的文件名,还会被文件夹名调用。 它过滤的第一个文件夹名称显然是您作为源传递给ncp的名称。如果失败,ncp只会停止复制该文件夹中的任何内容。

请参阅:https://github.com/AvianFlu/ncp/issues/130

答案 1 :(得分:0)

对于晚到聚会的人(如我):

ncp遍历目录树,也要对目录的完整路径进行过滤,此外,还要对源目录本身进行测试。就我而言,我想从名为one.svg, zwei.svg, tres.svg的单级目录中复制一堆(让它们称为images)SVG文件,这导致以下代码:

ncp(srcImages, outImages, { filter: /.*(images|one\.svg|zwei\.svg|tres\.svg)$/ }, err => {
  if (err) return console.error(err);
  console.log('done!')
});

PS:请注意,正则表达式的末尾有$,这意味着我们尝试匹配字符串的末尾