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
}
使用nodeJS编写脚本,根据文件列表将源目录的目标文件复制到新目录
原文作者:August_ccc�
原文地址: https://blog.csdn.net/weixin_44416019/article/details/120154783
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/weixin_44416019/article/details/120154783
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。