node快速复制文件或文件夹,排除部分文件(node_modules)

2024-09-08 03:20

本文主要是介绍node快速复制文件或文件夹,排除部分文件(node_modules),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


const fs = require('fs')
const path = require('path')/*** @description: 获取完整的文件路径* @param {*} url 路径* @return {*} 返回完整的文件路径*/
const getPath = (url) => {return path.join(__dirname, url)
}/*** @description: 获取参数* @return {*} target【目标文件夹】 source【源文件夹】*/
function parseArgv() {let arguments = process.argv.splice(2)const target = arguments[0] || './copy'const source = arguments[1] || './'return { target, source }
}/*** @description: 是否是文件夹* @param {*} pathDir 路径* @return {*} true 是,false 否*/
const isDir = (pathDir) => {const path = getPath(pathDir)let data = falsetry {data = fs.statSync(path).isDirectory()return data} catch (error) {return data}
}/*** @description: 获取文件夹列表* @param {*} pathDir 路径* @return {*} 文件列表*/
const getDirList = (pathDir) => {const path = getPath(pathDir)return new Promise((resolve, reject) => {fs.readdir(path, (err, data) => {if (err) {rejects(err)}resolve(data)})})
}const exclude = ['node_modules', '.gitignore']const main = async (target, source) => {let list = await getDirList(source)const except = [path.basename(target), path.parse(__filename).base]list = list.filter((item) => {return !except.includes(item)})isDir(target) ? '' : fs.mkdirSync(target, { recursive: true })const copyFile = (list, target, source) => {const result = list.filter((item) => {return !exclude.includes(item)})result.forEach(async (item) => {const path =source.endsWith('./') || source.endsWith('/')? './' + item: source + '/' + item // 原始路径const copyPath = target + '/' + item //复制的路径if (isDir(path)) {if (!fs.existsSync(copyPath)) {await fs.mkdirSync(copyPath)console.log(`正在复制:文件夹从${getPath(path)}------->复制到${getPath(copyPath)} ======成功`)}let needCopyList = await getDirList(path)await copyFile(needCopyList, copyPath, path)} else {if (!fs.existsSync(copyPath)) {fs.copyFileSync(path, copyPath)console.log(`正在复制:文件从${getPath(path)}------->复制到${getPath(copyPath)} ======成功`)}}})}copyFile(list, target, source)
}
const { target, source } = parseArgv()
main(target, source)

这篇关于node快速复制文件或文件夹,排除部分文件(node_modules)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146973

相关文章

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os