使用 nodeJs 递归拷贝一个目录到另一个目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
/** * Created by PhpStorm. * User: iyahe@qq.com (天明) * Date: 2019/10/10 0010 * Time: 上午 10:34 * Description: */ const fs = require('fs') /** * 允许被复制的文件后缀列表 * @type {string[]} */ const copyExt = ['.html', '.php'] /** * 复制一个文件夹下的文件到另一个文件夹 * @param src 源文件夹 * @param dst 目标文件夹 */ const copyDir = function (src, dst) { // 读取目录中的所有文件/目录 fs.readdir(src, function (err, paths) { if (err) { throw err } paths.forEach(function (path) { const _src = src + '/' + path const _dst = dst + '/' + path let readable; let writable fs.stat(_src, function (err, st) { if (err) { throw err } // 判断是否为文件 if (st.isFile()) { // 允许的后缀才可以被复制 if (contains(copyExt, _src)) { // 创建读取流 readable = fs.createReadStream(_src) // 创建写入流 writable = fs.createWriteStream(_dst) // 通过管道来传输流 readable.pipe(writable) } else { // console.log(_src + ' 不允许被复制!!!') } } // 如果是目录则递归调用自身 else if (st.isDirectory()) { exists(_src, _dst, copyDir) } }) }) }) } /** * 在复制目录前需要判断该目录是否存在, * 不存在需要先创建目录 * @param src * @param dst * @param callback */ const exists = function (src, dst, callback) { // 如果路径存在,则返回 true,否则返回 false。 if (fs.existsSync(dst)) { callback(src, dst) } else { fs.mkdir(dst, function () { callback(src, dst) }) } } /** * 判断数组中的元素是否包含此字符串 * @param arr * @param obj * @returns {boolean} */ const contains = function (arr, obj) { let flag = false arr.map((val) => { if (obj.includes(val)) { flag = true } }) return flag } // 复制目录 exists('./dist/', './m.soyoung.com/protected/views/topic/', copyDir) |