node.js 递归复制文件夹(附带文件过滤功能)
1、简介:
很简单,写了一个node操作文件的小脚本,主要实现对目标文件夹中内容的复制。还顺带一个按照文件夹或者文件名过滤的功能。
2、应用场景
适合基于 node 环境的项目,项目打包的时候,配合 webpack 配置,生成需要的线上项目目录,方便快捷。
3、 使用说明
代码我检验过,应该是没bug的,至于文件过滤,这里只提供一个版本,具体需求大家可以自己改代码,很简单就是过滤代码位置放在哪的问题
4、参数及大致思路解析
function (srcPath, tarPath, filter = [])
srcPath: String 要复制的文件路径
tarPath: String 复制后存放的文件路径
filter: Array[String] 需要过滤的文件、文件夹名 ps: 注意,只按照名称过滤,不同目录同名文件不做区分 设计思路: 读取 srcPath 目录内容,先检验是否过滤。然后依次判断类型,如果是文件直接复制到目标目录,如果是文件夹,先再目标目录创建同名文件夹,然后递归。
5、代码
const fs = require('fs');
const path = require('path');
const copyFile = function (srcPath, tarPath, filter = []) {
fs.readdir(srcPath, function (err, files) {
console.log(files)
if (err === null) {
files.forEach(function (filename) {
let filedir = path.join(srcPath,filename);
let filterFlag = filter.some(item => item === filename)
if (!filterFlag) {
fs.stat(filedir, function (errs, stats) {
let isFile = stats.isFile()
if (isFile) { // 复制文件
const destPath = path.join(tarPath,filename);
fs.copyFile(filedir, destPath, (err) => { })
} else { // 创建文件夹
let tarFiledir = path.join(tarPath,filename);
fs.mkdir(tarFiledir,(err) => { });
copyFile(filedir, tarFiledir, filter) // 递归
}
})
}
})
} else {
if (err) console.error(err);
}
})
}
//使用
copyFile('./public', './public2', ['robots.txt', 'svg'])
node.js 递归复制文件夹(附带文件过滤功能)的更多相关文章
- centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)
centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ...
- 转发:centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)
http://blog.csdn.net/lpdx111/article/details/16877725 centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建 ...
- Linux: cp 复制文件、文件夹到文件夹
参数 a 该选项通常在拷贝目录时使用.它保留链接.文件属性,并递归地拷贝目录,其作用等于dpR选项的组合. d 拷贝时保留链接. f 删除已经存在的目标文件而不提示. i 和f选项相反,在 ...
- node.js—创建、删除、追加文件等方法汇总
使用Node.js的fs模块必须在electron项目里 /* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs ...
- Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹
Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹 1.将一个文件夹下的所有内容复制到另一个文件夹下 cp -r /home/packageA/* /home/cp/packageB ...
- node.js 使用 UglifyJS2 高效率压缩 javascript 文件
UglifyJS2 这个工具使用很长时间了,但之前都是在 gulp 自动构建 时用到了 UglifyJS 算法进行压缩. 最近玩了一下 UglifyJS2 ,做了一个 在线压缩javascript工具 ...
- C# 将文件夹中文件复制到另一个文件夹
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- Node.js学习笔记(5)--文件简单操作
说明(2017-5-3 11:53:45): 1. foo.js var fs = require("fs"); var documents = []; fs.readdir(&q ...
- java删除递归文件夹及文件夹下文件
public static void delUrlLocalFile(String urlPath) { File file = new File(urlPath); if(file.isDirect ...
随机推荐
- python学习之re (?P...)通过关键字获取组以及( P=name)
和其他的RE表达式一样,但是匹配的子串可以通过group的名字 name来获取.即 result.group('name') (提示,字符串数字都是常量,所以关键字都可以被视为整型(hash结果) ...
- Java - day001 - 8种基本数据类型
一字节8电位 Java byte 最左边一位表示正负,0是正,1是负. (option / alt) + / 代码提示 Refactor 重构 Rename 重命名 (windows 重命名是选中 ...
- Django之Orm的各种操作
1.一般操作 ***必知必会13条*** <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 models.Cu ...
- Typescript---01 数据类型
Typescript数据类型 1. 布尔值boolean let isDone: boolean = false; 注意: 使用构造函数Boolean创造的对象不是布尔值,它是一个对象.所以下边的示例 ...
- SpringBoot 整合Dubbo
RPC框架可参考:https://blog.csdn.net/top_code/article/details/54615853 整合可参考:https://www.dalaoyang.cn/arti ...
- Python用可变参数找出最大值和最小值
# 方法一 利用max min 函数. 注意这里max min 分别都是功能函数 def main_m(*args): i = max(args) j = min(args) print(" ...
- Centos安装Consul微服务
一.简介 Consul([ˈkɒnsl],康搜)是注册中心,服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离.除了Consul之外,还有Eureka.Zoo ...
- Gradle 打包上传至私有仓库配置
allprojects{ apply plugin: 'java' apply plugin: 'idea' apply plugin: 'maven' group 'com.xxxxx.base' ...
- jq实现遮罩等待转圈
function Show_TopDiv(msg,msg_Width,msg_Height) { var titleheight = "22px"; // 提示窗口标题高度 var ...
- CF809E Surprise me!
题解: 一道很套路的题目 首先一个结论 $\phi(xy)=\frac{\phi(x)*\phi(y)*gcd(x,y)}{\phi(gcd(x,y))}$ 这个按照$\phi$的定义很容易知道 然后 ...