问题描述
我想递归地将/ 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版本非常容易。