使用nodeJS编写脚本,根据文件列表将源目录的目标文件复制到新目录

const fs = require('fs');
const src_list = 'F:/workspace/front'; // 被复制的源目录
const dst_list = './new_front'; // 复制后的目录
const allowFiles = './all.txt'; // 允许被复制的目标文件列表
/** * 允许被复制的目标文件列表 */
let copyFileArr = [];
fs.readFile(allowFiles, function (err, data) { 
    if (err) { 
        throw err;
    }
    copyFileArr = data.toString().split("\n");
    copyFileArr = decode(copyFileArr);
    // 检索文件并复制到dst_list目录下
    exists(src_list, dst_list, copyDir)
})

/** * 遍历文件名,进行解码 * @param arr 文件列表 */
const decode = function (arr) { 
    for (i in arr) { 
        if (arr[i].indexOf("%") !== -1) { 
            arr[i] = decodeURIComponent(arr[i])
        }
    }
    return arr
}
/** * 复制一个文件夹下的文件到另一个文件夹 * @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(copyFileArr, _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) { 
    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
    obj = obj.replace(src_list, "")
    flag = arr.some(i => i === obj);
    return flag
}

    原文作者:August_ccc�
    原文地址: https://blog.csdn.net/weixin_44416019/article/details/120154783
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞