Linux 命令行/bash脚本 批量创建文件

news2024/9/24 5:22:24

目录

  • 一. 命令行
    • 1.1 需求
    • 1.2 代码
  • 二. bash脚本
    • 2.1 需求
    • 2.2 前置知识
    • 2.3 无进度条版本
      • 2.3.1 知识点
      • 2.3.2 代码
      • 2.3.3 效果
    • 2.4 有进度条版本
      • 2.4.1 代码
      • 2.4.2 效果


一. 命令行

1.1 需求

  • 在当目录下生成指定年份的文件,要求从生成1月到12月,每个月份的文件。
  • 每个月的天数不一样
  • 2月份可能存在闰年

1.2 代码

  • {01..12}:扩展成一个连续序列,1到12
# 创建2023年到2024年1月到12月的1号到31号所有的文件
touch ./{2023..2024}{01..12}{01..31}_PAY_INFO_MSG.csv

# 2,4,6,9,11月份没有31号,删除不符合规则的文件
rm ./*{0{2,4,6,9},11}31_PAY_INFO_MSG.csv
# 2月不可能有30号,为提高可读性,单独删除
rm ./*0230_PAY_INFO_MSG.csv

# 2023年不是闰年,2月份不可能有29天,为提高可读性,单独删除
rm ./20230229_PAY_INFO_MSG.csv

⏹⇓⇓⇓效果如下⇓⇓⇓

fegyehong@apluser MINGW64 ~/Desktop/
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230101_PAY_INFO_MSG.csv
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230102_PAY_INFO_MSG.csv
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230103_PAY_INFO_MSG.csv
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230104_PAY_INFO_MSG.csv
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230105_PAY_INFO_MSG.csv
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230106_PAY_INFO_MSG.csv
-rw-r--r-- 1 fegyehong 197609 0  93 07:54 20230107_PAY_INFO_MSG.csv

...... 省略 ......

二. bash脚本

2.1 需求

在当目录下生成指定年份的文件,要求从生成1月到12月,每个月份的文件。

  • 若用户不指定年份,则默认生成当前年的文件
  • 提示文字彩色显示
  • 创建一个文字版本进度条,实时显示创建的进度
  • 每个月的天数不一样
  • 2月份可能存在闰年

2.2 前置知识

echo命令可以使用-e配置项来转义ANSI 转义码,进而打印彩色文本。

  • ANSI 转义码的基本格式是 \033[<code>m,其中<code>是一个代表颜色或样式的数字。
    • 红色:\033[31m
    • 绿色:\033[32m
    • 黄色:\033[33m
    • 蓝色:\033[34m
    • 洋红:\033[35m
    • 青色:\033[36m
    • 白色:\033[37m
  • 彩色文本打印完之后,可以使用\033[0m来重置颜色回到默认值。
    如果不重置颜色回到默认值的话,整个控制台的颜色都会受到影响。

2.3 无进度条版本

2.3.1 知识点

local year=$1

  • local :声明变量是局部变量
  • year=$1:将用户传入的第一个参数赋值给year变量。
    在bash中,用于变量赋值的=的前后是不能有空格的,这一点和其他编程语言不同。

if [ -z "$year" ];

  • -z:是一个字符串操作选项,用于检查字符串的长度是否为零。
    常用于判断变量是否为空(即未设置或值为空字符串)。
    如果字符串的长度为零,则返回真(true)。
  • "$year"$year是我们定义的变量名,只有被双引号"包裹,才会解析为对应的变量值。
    如果被单引号'包裹,'$year'只会被解析为普通字符串。

$(date +%Y)

  • $():用于执行括号内的命令,并将命令的输出作为字符串返回。
  • date:是一个 Unix/Linux 系统上的命令,用于显示或设置系统的日期和时间。
  • +%Y:是 date 命令的格式化选项。%Y 指定了年份的四位数字格式。
    例如,在 2024 年执行时,date +%Y 会输出 2024。

if [[ ! "$choice" =~ ^[Yy]$ ]];

  • [[ ... ]]:Bash 中的扩展测试命令,提供了更强大的条件测试能力。
    [ ... ] 相比,[[ ... ]] 支持更多的运算符,并且在处理复杂条件(正则表达式)时,更为安全和灵活。
  • "$choice" =~ ^[Yy]$
    • =~ 是 Bash 中用于模式匹配的操作符。
    • 用于将变量的值与一个正则表达式进行匹配。
    • 如果匹配成功,条件为真;如果匹配失败,条件为假。
    • 用于限定用户输入的值只能为y或者Y

date -d "$month/01/$year +1 month -1 day" +%d

  • date -d-d选项允许指定一个日期字符串并对其进行计算。
  • +1 month -1 day
    • +1 month:将日期加一个月,计算出指定月份的下个月的第一天。
    • -1 day:从上一步计算得到的日期减去一天,得到当前指定月份的最后一天
    • +%d:date 命令的格式化选项,表示只输出日期中的
  • date -d "02/01/2024 +1 month -1 day" +%d29

seq -w 01 29

  • 用于生成从起始值到终止值的序列
  • seq [选项] 起始值 终止值
  • -w: 用于零填充输出,使得所有输出的数字具有相同的宽度。
    在此案例中,用于生成01 02 03 ...

2.3.2 代码

create_files_for_year() {
  
  # 局部变量
  local year=$1

  # 如果没有传入年份参数,则提示用户使用当前年份
  if [ -z "$year" ]; then
  
    # 获取当前年份
    year=$(date +%Y)
	
    # 红色文字提示
	echo -e "\033[31m没有指定年份,默认使用当前年份 ${year} 进行创建。\033[0m"
    read -p "是否继续?(y/n): " choice
	
    if [[ ! "$choice" =~ ^[Yy]$ ]]; then
	  # 蓝色文字提示
      echo -e "\033[34m文件创建取消...\033[0m"
      return
    fi
	
  fi

  # 绿色文字
  echo -e "\033[32m⇓⇓⇓开始创建文件⇓⇓⇓\033[0m"
  # 睡眠1秒,显示文件创建的绿色文字
  sleep 1

  # 循环1月到12月,批量创建文件 
  for month in {01..12}; do
    for day in $(seq -w 01 $(date -d "$month/01/$year +1 month -1 day" +%d)); do
      # 将当前创建的文件打印到控制台上
      echo "./${year}${month}${day}_GIME_PAY_HIST.csv.gz"
      # 创建文件
      touch ./${year}${month}${day}_GIME_PAY_HIST.csv.gz
    done
  done
}

2.3.3 效果

在这里插入图片描述


2.4 有进度条版本

2.4.1 代码

create_files_for_year() {

  # 局部变量
  local year=$1

  # 如果没有传入年份参数,则提示用户使用当前年份
  if [ -z "$year" ]; then
    year=$(date +%Y)
    
    # 红色文字提示
    echo -e "\033[31m没有指定年份,默认使用当前年份 ${year} 进行创建。\033[0m"
    read -p "是否继续?(y/n): " choice
    
    if [[ ! "$choice" =~ ^[Yy]$ ]]; then
      # 蓝色文字提示
      echo -e "\033[34m文件创建取消...\033[0m"
      return
    fi
  fi

  # 绿色文字
  echo -e "\033[32m⇓⇓⇓开始创建文件⇓⇓⇓\033[0m"
  # 睡眠1秒,显示文件创建的绿色文字
  sleep 1

  # 计算总的文件数量
  total_files=0
  for month in {01..12}; do
    total_files=$((total_files + $(date -d "$month/01/$year +1 month -1 day" +%d)))
  done

  # 固定宽度进度条的宽度
  bar_width=50
  # 文件创建和进度条更新
  files_created=0
  
  for month in {01..12}; do
  
    # 计算指定的月份共有多少天,并从1号循环到月底
    for day in $(seq -w 01 $(date -d "$month/01/$year +1 month -1 day" +%d)); do
      # 批量创建文件
      touch ./${year}${month}${day}_GIME_PAY_HIST.csv.gz

      # 计算进度百分比
      files_created=$((files_created + 1))
      progress=$(( (files_created * 100) / total_files ))
      
      # 计算进度条的填充部分和空白部分
      filled_width=$(( (bar_width * progress) / 100 ))
      empty_width=$(( bar_width - filled_width ))

      # 输出固定宽度进度条
      printf "\r\033[33m进度: [%-${bar_width}s] %d%%\033[0m" "$(printf "%${filled_width}s" | tr ' ' '=')" "$progress"
    done
    
  done
  
  # 换行以结束进度条行
  echo
}

2.4.2 效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用 update-alternatives 切换软件版本 ?

Debian 中的 update-alternatives 命令是系统上多版本软件管理的利器。它允许您轻松地在同一程序的不同版本之间切换。假设您在单个系统上安装了多个 Java 版本或 Python 版本&#xff0c;在 update-alternatives 的帮助下&#xff0c;您可以将程序的任何版本设置为系统的默认版…

SAP MM模块与FI模块集成之科目配置

1. 定义评估范围 OMWD 评估范围设置在工厂层&#xff0c;那么系统自动建立和工厂具有相同ID的评估范围 IMG&#xff1a;物料管理>评估和科目设置>科目确定>无向导的科目确定>将评估范围群集分组 提示&#xff1a;评估层级——评估分组代码——评估范围。 2. OBYC…

【Unity案例】搭建射击系统与UI

上期将基础的移动系统搭建完毕后就可以开始搭建更加复杂的系统部分了 前排提示&#xff0c;由于一开始仅思考如何完成操作相关功能&#xff0c;以至于到后面重构稍微有些困难&#xff0c;继续写下去恐成屎山&#xff0c;故在搭完射击和武器UI后不再继续泛化到敌人和敌人状态机…

SF-HCI-SAP问题收集18:员工上级经理无效

导读 INTRODUCTION CPI集成&#xff1a;这几天一直在处理SuccessFactors与SAP集成的问题&#xff0c;因为没有给deubg权限&#xff0c;排查比较困难&#xff0c;这次讲解的案例就是一个比较难发现的案例&#xff0c;在同步员工主数据的时候提示&#xff0c;经历在某个区间无效…

前端原生Js批量修改页面元素属性的2个方法

前言 嘿&#xff0c;朋友们&#xff01;今天咱们来聊聊一个前端原生 JS 的小技巧。 今天在做一个 RPA 机器人时&#xff0c;碰到一个业务需求&#xff0c;网页上有两个日期控件元素&#xff0c;它们的输入框有 readonly 属性&#xff0c;只能通过选择的方式来输入日期&#x…

数据库和MySQL

ER图 实体&#xff08;矩形&#xff09;&#xff1a;通常是现实世界的业务对象&#xff0c;当然使用一些逻辑对象也可以。 属性&#xff08;椭圆&#xff09;&#xff1a;实体拥有的属性。 联系&#xff08;菱形&#xff09;&#xff1a;实体与实体之间的关系。 函数依赖 函数依…

idea 编译断点运行 tomcat 10.1.28 源码

idea 编译运行 tomcat 10.1.28 源码 1. 所需资源 tomcat 10.1.28 zulu JDK 22 maven idea (支持 JDK 22) 2. Idea 导入项目 10.1.28.tar.gz 解压到指定文件夹 如 ~\tomcat-source\tomcat-10.1.28 这里等待一段时间&#xff0c;生成 ~\tomcat-source\tomcat-10.1.28\.idea 文…

双向链表

双向链表是一种基本的数据结构&#xff0c;它与单向链表的主要区别在于节点的连接方式。下面我将分别描述双向链表的特点以及它与单向链表的区别。 双向链表的特点&#xff1a; 节点结构&#xff1a;在双向链表中&#xff0c;每个节点包含三个部分&#xff1a;数据域、指向前一…

WordPress自适应美图网站整站打包源码

直接服务器整站源码数据库打包了&#xff0c;恢复一下就可以直接投入使用。保证好用易用&#xff0c;无需独立服务器就可以使用。 强调一下&#xff0c;我这个和其他地方的不一样、不一样、不一样。具体的看下面的说明。 现在网络上同样的资源包都是用的加密带后门的主题&…

[C++11#47] (四) function包装器 | bind 函数包装器 | 结合使用

目录 一. function包装器 1. 在题解上 2.bind 绑定 1.调整参数顺序 2.对类中函数的包装方法 一. function包装器 function包装器也叫作适配器。C中的function本质是一个类模板&#xff0c;也是一个包装器。 那么我们来看看&#xff0c;我们为什么需要function呢&#xff1…

[数据集][目标检测]机油泄漏检测数据集VOC+YOLO格式43张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;43 标注数量(xml文件个数)&#xff1a;43 标注数量(txt文件个数)&#xff1a;43 标注类别数…

基于SSM的献血管理系统设计与实现(论文+源码)_kaic

摘 要 近年来&#xff0c;随着科技的飞速发展&#xff0c;在全球经济一体化的大背景下&#xff0c;我们面临着巨大的挑战&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;而且也会涉及到各个领域。献血管理系统在网络背景下有着无法忽视的作用&#x…

Xilinx FPGA 原语解析(三):OBUFDS差分输出缓冲器(示例源码及仿真)

目录 前言&#xff1a; 一、原语使用说明 二、原语实例化代码模版 三、使用示例 1.设计文件代码 2.仿真文件代码 3.仿真结果 前言&#xff1a; 主要参考 Xilinx 官方文档《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for HDL Designs》…

网络工程师学习笔记——局域网和城域网(二)

快速以太网 快速以太网&#xff08;&#xff18;&#xff10;&#xff12;.&#xff13;&#xff55; &#xff11;&#xff10;&#xff10;&#xff2d;&#xff42;&#xff50;&#xff53;&#xff09; 其中多模光纤的芯线直径为&#xff16;&#xff12;.&#xff15;…

跟李沐学AI:循环神经网络RNN

循环神经网络 循环神经网络&#xff08;recurrent neural networks&#xff0c;RNNs&#xff09; 是具有隐状态的神经网络。RNN 具有隐状态&#xff08;hidden state&#xff09;的原因在于它需要一种机制来存储之前输入的信息&#xff0c;以便于处理当前输入时能够考虑之前的…

Linux教程8:文本编辑命令vi

一、文本编辑命令介绍 vi&#xff08;Visual Interface&#xff09;是一种广泛使用的文本编辑器&#xff0c;特别是在Unix和类Unix系统&#xff08;如Linux&#xff09;中。尽管现代系统通常提供了更现代的文本编辑器&#xff08;如vim&#xff0c;它是vi的增强版本&#xff0…

vue axios发送post请求跨域解决

跨越解决有两种方案&#xff0c;后端解决&#xff0c;前端解决。后端解决参考Django跨域解决-CSDN博客 该方法之前试着可以的&#xff0c;但是复制到其他电脑上报错&#xff0c;所以改用前端解决 1、main.js做增加如下配置 import axios from axios Vue.prototype.$axios a…

Spring1~~~

快速入门 javaBean规范要有set方法&#xff0c;底层反射赋值 <!-- id表示在该java对象在spring容器中的id--><bean class"spring.bean.Monster" id"monster01"><property name"Id" value"100"/><property nam…

Unity数据持久化 之 向文件流读写(详细Plus版)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ 在 Unity 手册中&#xff0c;FileStream 并没有单独的详细介绍&#xff0c;因为它是 .NET 框架的一部分&#xff0c;…

已经存在的项目如何变成git的一个repository

已经存在的项目如何被git管理 背景&#xff1a; 有一套代码很敏感&#xff0c;可能动不动就要不能正常工作(硬件开发常事)&#xff0c;那改动一下下就要有个记录&#xff0c;就决定用git管理 已经有了服务里里docker里运行的gitbucket,已经有了开发用的电脑上的git客户端&…