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 递归复制文件夹(附带文件过滤功能)的更多相关文章

  1. centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)

    centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ...

  2. 转发:centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)

    http://blog.csdn.net/lpdx111/article/details/16877725 centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建 ...

  3. Linux: cp 复制文件、文件夹到文件夹

    参数 a 该选项通常在拷贝目录时使用.它保留链接.文件属性,并递归地拷贝目录,其作用等于dpR选项的组合. d 拷贝时保留链接.    f 删除已经存在的目标文件而不提示.    i 和f选项相反,在 ...

  4. node.js—创建、删除、追加文件等方法汇总

    使用Node.js的fs模块必须在electron项目里 /* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs ...

  5. Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹

    Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹     1.将一个文件夹下的所有内容复制到另一个文件夹下 cp -r /home/packageA/* /home/cp/packageB ...

  6. node.js 使用 UglifyJS2 高效率压缩 javascript 文件

    UglifyJS2 这个工具使用很长时间了,但之前都是在 gulp 自动构建 时用到了 UglifyJS 算法进行压缩. 最近玩了一下 UglifyJS2 ,做了一个 在线压缩javascript工具 ...

  7. C# 将文件夹中文件复制到另一个文件夹

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  8. Node.js学习笔记(5)--文件简单操作

    说明(2017-5-3 11:53:45): 1. foo.js var fs = require("fs"); var documents = []; fs.readdir(&q ...

  9. java删除递归文件夹及文件夹下文件

    public static void delUrlLocalFile(String urlPath) { File file = new File(urlPath); if(file.isDirect ...

随机推荐

  1. day16——函数式编程和内置函数

    编程的方法论 面向过程:找到问题的 函数式:不可变.不用变量保存状态.不修改变量 面向对象: 高阶函数: 满足俩个特性任意一个即为高阶函数 1.函数的传入参数是一个函数名 2.函数的返回值是一个函数名 ...

  2. 圈水池 nyoj 78 凸包算法

    圈水池 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水, ...

  3. 安装kafka过程及出现的问题解决

    第一步:下载kafka安装包 下载地址:http://kafka.apache.org/downloads 解压 到/usr/local 目录 tar -zxvf kafka_2.12-2.2.0 第 ...

  4. tcp与ip协议的区别

    TCP/IP(TransmissionControlProtocol/InternetProtocol的简写,中文译名为传输控制协议/互联网络协议). 简单地说,就是由底层的IP协议和TCP协议组成的 ...

  5. http 响应状态码介绍

  6. java实现定时任务的三种实现方法

    转载于:https://blog.csdn.net/haorengoodman/article/details/23281343/ /** * 普通thread * 这是最常见的,创建一个thread ...

  7. pytest(1)

    安装就讲这么多,别的不多比比 第1个例子(基本法要了解): 这个例子中,还有一些需要注意的知识点: 1 pytest将在当前目录及其子目录中运行test _ * .py或* _test.py形式的所有 ...

  8. 【Linux】在Win10上搭建WSL(适用于Linux的Windows子系统)

    1.打开WSL  ,控制面板 -- 程序 -- 程序和功能 -- 打开或关闭Windows功能 - 选中[适用于Linux的Windows子系统] 2.开启后重启电脑 3.在Win10自带的Micro ...

  9. MYSQL双主全库同步复制

    环境: A.B两台服务器分别安装mysql-5.7.18服务端,配置成互为主从同步. linux系统版本为CentOS7 A服务器ip:192.168.1.7   主机名:test1 B服务器ip:1 ...

  10. Anaconda的安装与使用

    1. 安装Anaconda(Command Line) 1.1 下载 首先去Anaconda官网查看下载链接,然后通过命令行下载: $ wget https://repo.anaconda.com/a ...