当前位置:   article > 正文

Windows下执行bash脚本对文件批处理(修改文件名,删除文件)_windows bash脚本

windows bash脚本

续写之后不久看到这一篇诗文,有感而录:

                                        《临江仙》【宋】晏几道

梦后楼台高锁,酒醒帘幕低垂。去年春恨却来时。落花人独立,微雨燕双飞。

记得小苹初见,两重心字罗衣。琵琶弦上说相思。当时明月在,曾照彩云归。

目录

一、前言

二、程序

1、根据修改日期批量修改文件名

2、根据创建日期删除文件

1)删除当天文件

2)根据月份删除指定文件夹下文件

3)根据指定日期的文件

三、结尾语


一、前言

在日常使用电脑中,因手误复制了一堆文件,一个一个删除太麻烦,于是想偷个懒的我就去学习了一下bash脚本,以实现批量修改文件名、批量删除等等操作。

注意:下面程序执行过程为:修改文件名为.sh后缀,然后在脚本所在文件夹下右键打开git bash环境,执行{bash fileName.sh}即可成功运行脚本。

二、程序

1、根据修改日期批量修改文件名

1)描述

因在QQ上面下载大量图片,然鹅图片名却非常乱,要动手改的话一个一个改太慢,以实现根据修改日期批量修改文件名。

2)过程

首先我去学习了一下遍历文件夹内所有的文件,得到如下结果:

 do和done就是起始,截止符,然后第五行是通过学习这篇博客,作用是获取上一次修改时间并将其作为字符串赋给变量changeTime;后面是截取第1到10个字符串,其正好是年月日,将其赋给lastChangeTime,最后就是输出时间输出文件名啦。

 1.初步尝试(建议不要运行这个)

#! /bin/sh

files=$(ls $folder)

for file in $files

do

  changeTime=$(stat -c %y $file)

lastChangeTime=$(expr substr "$changeTime" 1 10)

mv "$file" "QQ截图_lastChangeTime.jpg"

echo $lastChangeTime

  echo $file

done

弊端:如果是同一日期的文件,则只留下后面修改的文件,而且,令人啼笑皆非的是,本身这个cmd文件也囊括进去了,所以,它也就光荣牺牲了。哈哈哈!

2.较为完善版

通过学习这篇博客,以及介绍截取字符串的博客,达到预期目的,不过上述弊端还在,同一日期的还是不能排除,仅仅是排除了learn.cmd文件,不让它被吞了(自己吞自己,xswl)。这个直接在文件夹中,在目录下右键,进入git bash命令行界面,然后输入命令{bash 文件名.cmd},记住如何修改的是10的话,是在当前目录起作用的,请勿随意运行,后果可能会是重要文件没了!请勿随意运行!!!

  1. #! /bin/sh
  2. files=$(ls $folder)
  3. for file in $files
  4. do
  5.   changeTime=$(stat -c %y $file)
  6. lastChangeTime=$(expr substr "$changeTime" 1 15)
  7. <<BLOCK
  8. 上面这行是截取字符串的作用,调用expr中的substr函数
  9. 可以将15修改为10,15是囊括了后面的内容,避免日期重复使文件消失
  10. BLOCK
  11. if [ "$file" != "learn.cmd" ];
  12. then
  13. mv "$file" "截图_$lastChangeTime.jpg"
  14. echo $lastChangeTime
  15.   echo ${file:0-4}
  16. fi
  17. done

2、根据创建日期删除文件
1)批量删除当天的文件
  1. #!/bin/bash
  2. # 指定要删除文件的文件夹路径
  3. folder_path="/path/to/folder"
  4. # 获取当前日期
  5. current_date=$(date +%Y-%m-%d)
  6. # 查找并删除当天创建的文件
  7. find "$folder_path" -type f -newermt "$current_date" ! -newermt "$current_date + 1 day" -exec rm {} \;
2)根据月份删除指定文件夹下文件
  1. #!/bin/bash
  2. # 指定要删除文件的文件夹路径
  3. folder_path="/path/to/folder"
  4. # 指定要删除的年份和月份,以2023年9月份的为例
  5. year="2023"
  6. month="09"
  7. # 构建日期字符串,格式为YYYY-MM-DD
  8. date_string="${year}-${month}-01"
  9. # 获取下个月的日期字符串,用于限制删除范围
  10. next_month=$(date -d "${date_string} + 1 month" +%Y-%m-%d)
  11. # 查找并删除指定日期范围内的文件
  12. find "$folder_path" -type f -newermt "$date_string" ! -newermt "$next_month" -exec rm {} \;
3)根据指定日期删除文件
  1. #!/bin/bash
  2. # 指定要删除文件的文件夹路径
  3. folder_path="/path/to/folder"
  4. # 指定要删除的日期
  5. year="2023"
  6. month="11"
  7. day="08"
  8. # 构建日期字符串,格式为YYYY-MM-DD
  9. date_string="${year}-${month}-${day}"
  10. # 查找并删除指定日期的文件
  11. find "$folder_path" -type f -newermt "$date_string" ! -newermt "$date_string + 1 day" -exec rm {} \;
三、结尾语

后续还会补充的,(・∀・(・∀・(・∀・*)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号