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 相关文章推荐
IE8 中使用加速器(Activities)
May 14 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
js控制网页前进和后退的方法
Jun 08 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
Jun 01 Javascript
解决angularjs WdatePicker ng-model的问题
Sep 13 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
vue项目配置同一局域网可使用ip访问的操作
Oct 23 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数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
php标签云的实现代码
2012/10/10 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
vue登录注册实例详解
2019/09/14 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
Python入门必须知道的11个知识点
2018/03/21 Python
python print出共轭复数的方法详解
2019/06/25 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
县级文明单位申报材料
2014/05/23 职场文书
积极向上的团队口号
2014/06/06 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
社区义诊通知
2015/04/24 职场文书
自荐信大全
2019/03/21 职场文书
Python正则表达式中flags参数的实例详解
2022/04/01 Python