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获取页面上某个元素的代码
Mar 13 Javascript
纯文字版返回顶端的js代码
Aug 01 Javascript
图解prototype、proto和constructor的三角关系
Jul 31 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
Dec 13 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
js中的面向对象入门
Mar 06 Javascript
vue中的模态对话框组件实现过程
May 01 Javascript
JavaScript实现仿Clock ISO时钟
Jun 29 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 Javascript
Vue父组件监听子组件生命周期
Sep 03 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获取文件名后缀
2013/06/09 PHP
php生成无限栏目树
2017/03/16 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
匹配任意字符的正则表达式写法
2010/04/29 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
怎样客观的做好自我评价
2013/12/28 职场文书
自我鉴定注意事项
2014/01/19 职场文书
仓管岗位职责范本
2014/02/08 职场文书
个人实习生的自我评价
2014/02/16 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
党支部季度考核意见
2015/06/02 职场文书
php 原生分页
2021/04/01 PHP
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
java基础——多线程
2021/07/03 Java/Android