Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件


Posted in Javascript onSeptember 18, 2017

实现代码一:

var fs  = require('fs')
var path = require('path')

var copyFile = function(srcPath, tarPath, cb) {
 var rs = fs.createReadStream(srcPath)
 rs.on('error', function(err) {
  if (err) {
   console.log('read error', srcPath)
  }
  cb && cb(err)
 })

 var ws = fs.createWriteStream(tarPath)
 ws.on('error', function(err) {
  if (err) {
   console.log('write error', tarPath)
  }
  cb && cb(err)
 })
 ws.on('close', function(ex) {
  cb && cb(ex)
 })

 rs.pipe(ws)
}

复制目录及其子目录

var copyFolder = function(srcDir, tarDir, cb) {
 fs.readdir(srcDir, function(err, files) {
  var count = 0
  var checkEnd = function() {
   ++count == files.length && cb && cb()
  }

  if (err) {
   checkEnd()
   return
  }

  files.forEach(function(file) {
   var srcPath = path.join(srcDir, file)
   var tarPath = path.join(tarDir, file)

   fs.stat(srcPath, function(err, stats) {
    if (stats.isDirectory()) {
     console.log('mkdir', tarPath)
     fs.mkdir(tarPath, function(err) {
      if (err) {
       console.log(err)
       return
      }

      copyFolder(srcPath, tarPath, checkEnd)
     })
    } else {
     copyFile(srcPath, tarPath, checkEnd)
    }
   })
  })

  //为空时直接回调
  files.length === 0 && cb && cb()
 })
}

使用时

copyFolder('...', '....', function(err) {
 if (err) {

  return
 }

 //continue
})

文章到此结束,希望有帮助的朋友多多支持三水点靠木。

Javascript 相关文章推荐
javascript一些不错的函数脚本代码
Sep 10 Javascript
javascript div 弹出可拖动窗口
Feb 26 Javascript
js function使用心得
May 10 Javascript
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
JS实现控制表格行文本对齐的方法
Mar 30 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
基于javascript实现窗口抖动效果
Jan 03 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
微信小程序 wxapp内容组件 icon详细介绍
Oct 31 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
js技巧之十几行的代码实现vue.watch代码
Jun 09 Javascript
为什么我们要做三份 Webpack 配置文件
Sep 18 #Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 #Javascript
十个免费的web前端开发工具详细整理
Sep 18 #Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
Sep 18 #Javascript
HTML5开发Kinect体感游戏的实例应用
Sep 18 #Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 #Javascript
Web技术实现移动监测的介绍
Sep 18 #Javascript
You might like
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
Javascript中神奇的this
2016/01/20 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
python3实现飞机大战
2020/11/29 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
别名指示符是什么
2012/10/08 面试题
小学信息技术教学反思
2014/02/10 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
护理医院见习报告
2014/11/03 职场文书
先进党支部事迹材料
2014/12/24 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
建国大业观后感600字
2015/06/01 职场文书