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 相关文章推荐
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
Javascript 汉字字节判断
Aug 01 Javascript
JavaScript 常用函数
Dec 30 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
Jun 12 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
原生JS轮播图插件
Feb 09 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 Javascript
js实现右键弹出自定义菜单
Sep 08 Javascript
详解Node.js如何处理ES6模块
May 15 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
python3判断url链接是否为404的方法
2018/08/10 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
大学毕业生简单自荐信
2013/11/05 职场文书
元旦促销方案
2014/03/15 职场文书
班级课外活动总结
2014/07/09 职场文书
领导参观欢迎词
2015/01/26 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
SQL SERVER中的流程控制语句
2022/05/25 SQL Server