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. Vue-计算属性和侦听属性

    复杂逻辑应使用计算属性而不应写在插值表达式{{ }}里 <div id="app"> 原值:{{ msg }} <br> 翻转后的值:{{ reverseM ...

  2. 20175315Mycp

    MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin ...

  3. 【转】Python3—UnicodeEncodeError 'ascii' codec can't encode characters in position 0-1

    转自:https://blog.csdn.net/AckClinkz/article/details/78538462 环境 >>> import sys >>> ...

  4. Appnium-API-Status

    Status Java:// TODO Python:selenium.webdriver.common.utils.is_url_connectable(port) Description Retu ...

  5. 简单的接口测试类和测试生成报告工具HTMLTestRunner.py

    Demo.py #coding:utf-8 # import requests import json ''' data = { 'username':'jackson', 'password':'a ...

  6. webpack4学习笔记

    执行webpack-dev-server的时候不会自动生成dist打包目录,怪不得公司的项目里面都没用到webpack-dev-server呢 执行webpack的时候会生成dist目录 watch的 ...

  7. iOS(12) ANCS链接问题(用Android 9.0设备链接)

    由于iOS系统默认不会为自带的ANCS服务发送广播, 并且使用ANCS的通知订阅功能必须进行配对. 所以我们需要在ios上写自己的代码,让目标设备和iOS进行配对. 配对完成后,监听设备和iOS都可以 ...

  8. Mac 小功能

    Safari  安装扩展    https://safari-extensions.apple.com/?category=translation 关闭第三方验证  有时候打开自己下载的安装包会提示 ...

  9. 具体分析UGUI中RectTransform

    一:RectTransform 组件 1.Transform 组件是所有的游戏物体必备的一个组件,且不可删除,不可隐藏.就算是一个空物体,也是具备 Transform 组件的. Unity3D4.6 ...

  10. coding基本功实践

    作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键.因为从一个人的代码可以直接看出你的基本功.对于Python而言,这就意味着你需要对Python的内置功能和库有很深入的了解. ...