通过VS Code task.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","label": "copyJson","${workspaceFolder}/src/**/*.json",}
    ]
}

但是它不起作用-出现错误cp: /src/**/*.json: No such file or directory

有什么想法如何在task.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版本非常容易。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...