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)
const fs require(fs) const path require(path)/*** description: 获取完整的文件路径* param {*} url 路径* return {*} 返回完整的文件路径*/ const getPath (url) > {return path.join(__dirname, url) }/*** description: 获取参数* return {*} target【目标文件夹】…...
网络层 VIII(网络层设备——路由器)【★★★★★★】
一、冲突域与广播域 这里的“域”表示冲突或广播在其中发生并传播的区域。 1. 冲突域 冲突域是指连接到同一物理介质上的所有结点的集合,这些结点之间存在介质争用的现象(能产生冲突的所有设备的集合)。也就是说,若这些设备同时发…...
302.AI学术论文搜索工具的智能体验
Hey朋友们, 你是否曾在学术的海洋里迷失方向,为了找到一篇论文而苦苦挣扎? 就像在茫茫大海中寻找灯塔,我们渴望一盏明灯,指引我们前行。 别担心,今天我来给你介绍一个超级给力的工具——302.AI学术论文…...
arm平台常用工具和动态库编译
目录 perf 交叉编译交叉编译zlib交叉编译 elfutils交叉编译 perfperf 使用 libconfig 交叉编译openssl 交叉编译libpcap 交叉编译统信、龙芯等平台编译QT交叉编译编译QT源码编译QtCreator 编译ssl编译libsrtp(2.3.0版本)编译libyuvlibopus编译libopenh264编译libusrsctp编译lib…...
代码随想录训练营day45|115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离
115.不同的子序列 题目 dp[i][j]表示的是在以是s[j]为结尾的字符串中最多可以找到几种组成以t[i]为结尾的字符串的方式。 如果s[i]t[j], 1.利用第i个和第j个匹配,在j-1中寻找i-1. 2.不适用这两个进行匹配,在j-1中寻找i 如果s[i]!…...
椋鸟C++笔记#7:标准模板库STL初识
文章目录 标准模板库(Standard Template Library)STL的版本P.J.版RW版SGI版 STL的组成部分 萌新的学习笔记,写错了恳请斧正。 标准模板库(Standard Template Library) 标准模板库STL,是C标准库的一个非常重…...
滴滴嘀嗒,出行行业响起Robotaxi“倒计时”
文:互联网江湖 作者:刘致呈 前几天,各大出行平台的半年报陆续披露完毕,有的还在亏损,但也有人开始盈利。 如祺出行上市后的首份半年报营收10.37亿,同比增长13.6%。上半年运营亏损为2.56亿元,同…...
【MATLAB源码-第264期】基于matlab的跳频通信系统仿真,采用MSK调制方式,差分解调;输出误码率曲线和各节点波形图。
操作环境: MATLAB 2022a 1、算法描述 跳频通信系统是一种能够提高通信抗干扰能力的技术,它通过在传输过程中不断地改变载波频率来避开干扰或者窃听。在这套跳频通信系统中,我们采用了最小频移键控(MSK)作为调制方式…...
如何在多台电脑上同步 VSCode配置和插件
上一篇文章最新前端开发VSCode高效实用插件推荐清单总结了前端开发实用的插件,换电脑的时候怎么同步这些配置与插件呢,难道又要重新安装一遍吗😱 现在就来聊聊要在多台电脑上同步 VSCode配置和插件的几种方法: 方法一࿱…...
深度优先算法,广度优先算法,hill climbing,贪心搜索,A*算法,启发式搜索算法是什么,比起一般搜索法算法有什么区别
深度优先算法(Depth-First Search, DFS) 深度优先搜索是一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点,尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程…...
《python语言程序设计》2018版第8章第14题金融:信用卡号合法性 利用6.29题
一、之前6.29题我做的代码 这是用数字来进行分辨的 is_txt 4383576018402626 #合法def split_the_data_even(vis_n):current_a1 vis_n // 10000a_t1 vis_n % 10000# print("1th", a_t1)a_t2 current_a1 % 10000# print("2th", a_t2)current_a3 curre…...
QT 基础学习
1> 使用绘制事件完成钟表的绘制 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QDebug> #include <QTime> #include <QTimer> #include <QDateTime> //#include <string> #includ…...
【Gephi】可视化教程
此教程专供欣欣向荣及其舍友使用 文章目录 导入数据上色改变布局设置节点大小统计拓扑结构输出图形保存文件 导入数据 点击【文件】-【导入电子表格】 先选择csv格式的network 直接下一步 点击完成 【图的类型】改为“有向的” 点击确认 会弹出报错,直接clos…...
演化式原型开发-系统架构师(六十五)
1快速迭代式的原型开发能够有效控制成本,()是指开发过程中逐步改进和细化原型直到产生目标系统。 A可视化原型开发 B抛弃式原型开发 C演化式原型开发 D增量式原型开发 解析: 原型开发分为两大类:快速原型开发(抛弃…...
初识爬虫4
1.理解代理ip,正向代理和反向代理 2.代理ip分类,根据匿名度分类:透明,匿名,高匿 3.防止频繁向同一个域名发送请求被封ip,需使用代理ip # -*- coding: utf-8 -*- import requestsurl https://www.baidu.comproxies {…...
Golang | Leetcode Golang题解之第387题字符串中的第一个唯一字符
题目: 题解: type pair struct {ch bytepos int }func firstUniqChar(s string) int {n : len(s)pos : [26]int{}for i : range pos[:] {pos[i] n}q : []pair{}for i : range s {ch : s[i] - aif pos[ch] n {pos[ch] iq append(q, pair{ch, i})} e…...
【CanMV K230 AI视觉】 人体检测
【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。 B站视频链接:已做成合集 抖音链接:已做成合集 人体检测 人体检测是判断摄像头画面中有无出现人体,常用于人体数量检测,人流量监控以及安防监控等。…...
解决浏览器自动将http网址转https
删除浏览器自动使用https的方式 在浏览器地址栏输入:chrome://net-internals/#hsts PS:如果是edge浏览器可输入:edge://net-internals/#hsts 在Delete domain security policies搜索框下,输入要删除的域名,然后点击delete 解决方法&#…...
linux邮件配置
1. 非加密邮件配置 cat <<EOF > smtp.sh #!/bin/bash providerqq account3282941991 passwordzqdtygmmndsgb22i3ee echo "Waiting For A Moment..." rpm -qa sendmail &> /dev/null|| yum install sendmail -y >/dev/null echo " set from$…...
基于springboot+vue乒乓球预约管理系统
基于springbootvuemysql实现的乒乓球预约管理系统(源码数据库部署视频) ### 主要技术 SpringBoot、LayUI、Vue、MySQL ### 系统角色 用户、管理员 ### 系统功能 前台: 首页、乒乓球场、公告信息、留言反馈、个人中心 后台: …...
避坑指南:在CentOS 7上部署泛微Ecology9 OA,我踩过的那些“内存不足”和“防火墙”的坑
CentOS 7部署泛微Ecology9 OA系统:从内存优化到防火墙配置的深度避坑指南 在Linux环境下部署企业级OA系统从来都不是一件简单的事情,尤其是像泛微Ecology9这样功能复杂的大型系统。表面上看,官方文档和网络上的教程似乎已经提供了完整的步骤&…...
CVAT教程
ubuntu服务器部署 https://blog.csdn.net/qq_48187848/article/details/146040443?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ERate-1-146040443-blog-145734432.235%5Ev43%5Epc_blog_bottom…...
VisDrone2019数据集转换COCO格式实战:手把手教你用Python脚本搞定YOLOX训练数据准备
VisDrone2019数据集转换COCO格式全流程解析:从数据清洗到YOLOX适配 无人机视角下的目标检测一直是计算机视觉领域的特殊挑战。VisDrone2019作为该领域最具代表性的开源数据集,包含了10个类别、超过26万张标注图像,但原始数据格式与主流框架的…...
硬件入门 + 单片机基础(第17天)云端物模型自定义
一、阿里云后台配置(添加 3 个标准属性)1. 进入物模型编辑页物联网平台 → 对应产品 → 功能定义 → 编辑物模型2. 逐个添加属性温度功能类型:设备属性功能名称:温度标识符:Temperature数据类型:浮点型&…...
告别COM Server!用Python+UDP给CANoe CAPL脚本开个“外挂”
突破CAPL封闭性:Python与CANoe的轻量级UDP通信实战 在汽车电子测试领域,CANoe作为行业标准工具,其内置的CAPL脚本语言为测试工程师提供了强大的自动化能力。然而,当我们需要将外部复杂算法(如机器学习模型)…...
手把手教你搞定KEIL4.74社区版激活:从注册到填问卷拿License的全流程避坑
KEIL 4.74社区版激活全流程实战指南:从零开始到成功获取License的完整攻略 作为一名嵌入式开发新手,第一次接触KEIL这个强大的开发环境时,难免会被其复杂的激活流程搞得晕头转向。特别是社区版的KEIL 4.74,虽然免费,但…...
EasyWatermark代码架构详解:MVVM模式与依赖注入实践
EasyWatermark代码架构详解:MVVM模式与依赖注入实践 【免费下载链接】EasyWatermark 🔒 🖼 Securely, easily add a watermark to your sensitive photos. 安全、简单地为你的敏感照片添加水印,防止被人泄露、利用 项目地址: ht…...
科研抢发期必看:Perplexity图书推荐查询速效组合技——3分钟生成带引用格式的跨学科书单
更多请点击: https://codechina.net 第一章:科研抢发期必看:Perplexity图书推荐查询速效组合技——3分钟生成带引用格式的跨学科书单 在论文投稿前的关键窗口期,快速定位权威参考文献是提升学术严谨性与跨学科说服力的核心能力。…...
LeetCode 重新安排行程题解
LeetCode 重新安排行程题解 题目描述 给定一个机票列表,从起点出发,重新安排行程。 示例: 输入:tickets [["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR&…...
苹果Siri 2025全面升级:从LLM集成到系统级智能体的技术路径解析
1. 项目概述:一次迟来的“大脑”升级最近,关于苹果Siri将在2025年迎来全面优化的消息,在圈内引发了不小的讨论。作为一名长期关注智能交互领域发展的从业者,我对此并不感到意外,反而觉得这是一次“虽迟但到”的必要手术…...
