在 VS Code 中按扩展名复制文件 tasks.json

Copy files by extension in VS Code tasks.json

我想以递归方式将 /src 中扩展名为 .json 的所有文件复制到我的 /out 目录中。我目前像这样复制静态文件夹中的所有文件(无论扩展名如何),在 tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "copyStatic",
            "command" : "cp",
            "args": ["-f", "-r", "${workspaceFolder}/src/static", "${workspaceFolder}/out/"],
        }
    ]
}

我尝试使用我在其他地方看到的 /**/ 符号,就像这样

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "copyJson",
            "command" : "cp",
            "args": ["-f", "-r", "${workspaceFolder}/src/**/*.json", "${workspaceFolder}/out/"],
        }
    ]
}

但是没有用 - 出现错误 cp: /src/**/*.json: No such file or directory

知道如何在 tasks.json 中执行此操作吗?我想深拷贝所以包括像

这样的文件
/src/foo.json --> /out/foo.json
/src/folder/bar.json --> /out/folder/bar.json

谢谢

使用 cp 可能很难实现复杂的查询。幸运的是,find 默认情况下递归搜索,并且可以与 -exec cp 结合使用以实际复制这些文件。

以下命令可以解决问题:

"command" : "find src/ -name "*.json" -exec cp {} out/ \;"

一个gulp解决方案很简单:

const gulp = require("gulp");

function copyJSONFiles() {

  return gulp.src('src/**/*.json')   // get all the json files from 'src' directory
    .pipe(gulp.dest('out'));        // move them to the workspace/out directory
}

exports.default = copyJSONFiles;


// /src/foo.json --> /out/foo.json
// /src/folder/bar.json --> /out/folder/bar.json

这个名为 gulpfile.js 的文件位于顶层的工作区文件夹中。它仅通过终端中的 gulp 命令触发。

将创建 out 文件夹,src 下的文件夹结构将保留在其中。


正如我在 10 月 13 日的评论中所说的那样

"command" : "find ./async -name '*.json' -exec cp --parents {} out/ ';'",

将保留 src 目录(此处 async)的文件夹结构,但不幸的是在 out/async 下。这就是 --parents 选项的目的。

但是,不使用 --parents 选项会导致只有 json 个文件的平面文件夹,这似乎不是您想要的。

可能有一个纯脚本版本,它会展平该父文件夹,删除其中的 src 文件夹。但是 gulp 版本非常简单。