节点 ncp 过滤器无法正常工作

3

我正在尝试通过 node 的 ncp 库 过滤文件,但它的过滤器没有生效。 一旦过滤器返回假值,整个复制进程就会中断。

   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
        };

当过滤函数或正则表达式实例获取到false结果时,整个复制操作中止。

options.filter - 一个正则表达式实例,用于测试每个文件名以确定是否复制该文件,或者一个只接受单个参数(已复制的文件名)并返回true或false的函数,用于确定是否复制文件。


你找到解决方法了吗?我现在也遇到了同样的问题。一旦我使用的 RegExp 将测试过滤为 false,ncp 就会默默地崩溃。 - Schadenn
由于ncp不再维护,我转而使用fs-extracopy()函数,它也支持过滤器 - tertek
2个回答

2
我找到了解决方案: 似乎过滤器RegExp / function不仅会针对ncp应该复制的文件名调用,而且还会针对文件夹名称进行调用。 它过滤的第一个文件夹名称显然是您作为源传递给ncp的那个。如果失败,ncp将停止复制该文件夹中的任何内容。
参见:https://github.com/AvianFlu/ncp/issues/130

这篇帖子似乎不是试图回答这个问题。这里的每篇帖子都应该是明确尝试回答这个问题;如果您有批评意见或需要澄清问题或其他答案,您可以在它下面直接发布评论(就像这个)。请删除此答案并创建评论或新问题。参见:提问,获取答案,无干扰 - adiga
感谢提示,adiga。我编辑了我的回答,使其成为一个真正的答案,因为我刚找到了解决方案。 - Schadenn

0
对于那些像我一样来晚了的人: ncp以一种遍历目录树的方式,使得目录完整路径也受到过滤器的影响,此外,源目录本身也会被测试。在我的情况下,我想从名为images的单层目录中复制一堆(让我们称之为one.svg, zwei.svg, tres.svg)SVG文件,结果如下代码所示:
ncp(srcImages, outImages, { filter: /.*(images|one\.svg|zwei\.svg|tres\.svg)$/ }, err => {
  if (err) return console.error(err);
  console.log('done!')
});

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


1
文件类型前面的点应该被转义。 - Sjeiti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接