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
Javascript图像处理思路及实现代码
Dec 25 Javascript
JS删除字符串中重复字符方法
Mar 09 Javascript
javascript学习笔记--数字格式类型
May 22 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
js实现无限级树形导航列表效果代码
Sep 23 Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 Javascript
使用JavaScript根据图片获取条形码的方法
Jul 04 Javascript
JavaScript实现时间表动态效果
Jul 15 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
详解Js里的for…in和for…of的用法
Mar 28 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 22 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 setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
python生成九宫格图片
2018/11/19 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
解释i节点在文件系统中的作用
2013/11/26 面试题
企业文化口号
2014/06/12 职场文书
婚前协议书范本
2014/10/27 职场文书
迟到检讨书
2015/01/26 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
农业项目合作意向书
2015/05/08 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
导游词之介休绵山
2019/12/31 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
vue中div禁止点击事件的实现
2022/04/02 Vue.js