我有一个目录和一些子目录所以当我查找我的文件时,我使用像
这样的通配模式'src/**/*.js'
问题是我想将扩展名重命名为.old.js
障碍是我需要重命名.old.js文件并保留在找到的目录中,但我不清楚这是如何实现的。
我尝试过各种各样的东西,到目前为止,唯一有效的方法是分别在一个单独的复制任务中查看每个目录,这不是我想要做的。
有没有其他方法?
答案 0 :(得分:1)
考虑以下虚构目录结构:
src
├── 1.js
├── 2.js
└── a
├── 3.js
├── 4.js
└── b
├── 5.js
├── 6.js
└── c
├── 7.js
└── 8.js
<强> Gruntfile.js 强>
您可以按如下方式配置grunt-contrib-copy任务:
module.exports = function(grunt) {
grunt.initConfig({
copy: {
js: {
files: [{
expand: true,
dot: true,
cwd: 'src',
dest: 'src/',
src: [
'**/*.js'
],
rename: function(dest, src) {
return dest + src.replace('.js', '.old.js');
}
}]
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.registerTask('default', [
'copy:js'
]);
};
结果目录结构(示例一)
使用如上所示配置的$ grunt
通过CLI运行Gruntfile.js
将导致以下结果:
(注意:每个原始.js
文件已复制到同一文件夹位置并添加了.old.js
扩展名:
src
├── 1.js
├── 1.old.js
├── 2.js
├── 2.old.js
└── a
├── 3.js
├── 3.old.js
├── 4.js
├── 4.old.js
└── b
├── 5.js
├── 5.old.js
├── 6.js
├── 6.old.js
└── c
├── 7.js
├── 7.old.js
├── 8.js
└── 8.old.js
如果您不想保留原始.js
文件,那么您还需要使用grunt-contrib-clean删除原件。
<强> Gruntfile.js 强>
module.exports = function(grunt) {
grunt.initConfig({
copy: {
js: {
files: [{
expand: true,
dot: true,
cwd: 'src',
dest: 'src/',
src: [
'**/*.js'
],
rename: function(dest, src) {
return dest + src.replace('.js', '.old.js');
}
}]
}
},
clean: {
originaljs: [
'src/**/*.js',
'!src/**/*.old.js'
]
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.registerTask('default', [
'copy:js',
'clean:originaljs'
]);
};
结果目录结构(示例二)
使用修订后的$ grunt
运行Gruntfile.js
后的这一次将导致以下结果:
(注意:每个原始.js
都已删除,只有.old.js
扩展名存在。)
src
├── 1.old.js
├── 2.old.js
└── a
├── 3.old.js
├── 4.old.js
└── b
├── 5.old.js
├── 6.old.js
└── c
├── 7.old.js
└── 8.old.js