• Shell根据文本内容批量修改文件名(附完整代码)


    Shell根据文本内容批量修改文件名

    开始之前讲一下重命名规则,在Linux文件夹里面按照指定文本内容搜索是否存在该文件,如果存在就按照文本规则替换成对应名称。

    一、前期准备

    1、准备一个改名规则replace.txt文本(我这里取名这个,你们不喜欢可以取其他名称,修改对应代码即可),样式如下:

    replace.txt
    *注意: replace.txt最好是在linux里面touch replace.txt新建好,拉到windows上面编辑的,不然可能会存在乱码的情况;replace.txt文本内容第一列是在linux放置脚本文件夹里面搜索的文件名filename,第二列是替换名,中间以空格拆分。

    touch replace.txt
    
    • 1
    2、传输replace.txt、replace.sh文件到需要批量重命名的文件夹里面,检查replace.txt的格式是否是unix,如果不是则需要修改。

    UNIX
    修改方法:

    vim replace.txt
    :set ff=unix
    
    • 1
    • 2

    二、执行过程

    执行过程

    ls结果

    下面直接附代码:
    附录

    #/bin/bash  
    #find()
    function find(){
    while read line
    do 
    # 拆分文件每行字符串为数组进行遍历循环
    str=$line
    OLD_IFS="$IFS"
    #中间以空格拆分
    IFS=" "
    arr=($str)
    IFS="$OLD_IFS"
    #echo ${arr[0]}
    #echo ${arr[1]}
    #遍历查找文件名
    files=$(ls $path)
    #echo "$files"
    for filename in $files
    do
    #去除后缀
    arr1=${filename%.*}
    #arr1=$filename
    #循环遍历查找 不能使用-eq,字符串比较使用==
    if [[ ${arr[0]} == ${arr1[@]} ]];
    then
    #此处如果批量修改的文件过多,可以不输出文件名
    echo ${arr[0]}.jpg  ${arr[1]}.jpg  
    #修改文件名
    mv ${arr[0]}.jpg ${arr[1]}.jpg 
    ((i++))
    #echo ${arr1[@]} 
    fi
    #echo $filename
    done
    #如果命名规则文件不是replace,则需要修改文件名
    #重定向,可以计数
    done < replace.txt 
    }
    echo "                                                         "
    echo "*****************************************************************"
    echo "**----------查找replace.txt文件内容重命名*.jpg文件-------------**"
    echo "**   1、在linux新建一个replace.txt拉到windows服务器            **"
    echo "**   2、从数据库将新学号、老学号导出到excel,保存为txt文本     **"
    echo "**   3、打开txt文本,将tab字符替换成空格后放到linux对应目录下面 **"
    echo "**   4、vim打开文件后按ESC后输入" ":set ff=unix" "                 **"
    echo "**   5、cat检查txt文本没有乱码后继续执行                       **"
    echo "*****************************************************************"
    echo "\   ^__^"
    echo "\   (oo)\_______"
    echo "    (__)\       )\/\ "
    echo "        || HENRY|"
    echo "        ||     ||"
    echo "-----------------------------------------------------------------"
    echo "---------------------需要重命名的文件有:-------------------------"
    read -p "请确认你已经准备好了(Y/N):" input
    if [[ $input == Y || $input == y ]];
    then
    i=0
    find
    echo "本次一共重命名:"$i"个文件"
    else
    echo "                                                         "
    echo "----------------请准备好后再开始!!!---------------------"
    echo "                                                         "
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
  • 相关阅读:
    变量和数据类型
    【强化学习论文合集】AAMAS-2022 | 人工智能CCF-A类会议 (附链接)
    Vue开发 提交后台,二维码,自定义
    市场拓展招聘:完整指南
    Thread类中run和start的区别
    短视频创作有什么建议吗,如何把视频变成爆款?
    OS--学习笔记:进程管理
    <Linux系统复习>命令行参数和环境变量
    Using Definition View 使用定义视图
    Nginx基础篇-Nginx的日志模块
  • 原文地址:https://blog.csdn.net/weixin_43205774/article/details/125896803