Shell子串_变量子串案例_批量修改文件名

发布时间 2023-10-09 17:46:07作者: WeChat2834
实际案例批量修改文件名

准备测试数据

[root@localhost sub_str]# touch  xujianbing_{1..5}_finished.jpg
[root@localhost sub_str]# touch  xujianbing_{1..5}_finished.png
[root@localhost sub_str]# ll
总用量 0
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_1_finished.jpg
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_1_finished.png
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_2_finished.jpg
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_2_finished.png
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_3_finished.jpg
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_3_finished.png
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_4_finished.jpg
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_4_finished.png
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_5_finished.jpg
-rw-r--r--. 1 root root 0 9月  13 15:53 xujianbing_5_finished.png
[root@localhost sub_str]# 

应用实例

  1. 去掉所有文件的_finished字符信息

    #!/bin/bash
    
    ###也可以用ls命令只列出名称  ls *.jpg ;ls  *.png
    ##当然我想的grep
    for var in `find  ./ |grep finished`
    do
      ####echo ${var#./}
      var1=${var#./}
      var2=${var1/finished/}
      mv ${var1}  ${var2} 
      echo ${var1}文件修改为 ${var2} 
    done
    [root@localhost sub_str]# sh chfilename.sh 
    xujianbing_1_finished.jpg文件修改为 xujianbing_1_.jpg
    xujianbing_2_finished.jpg文件修改为 xujianbing_2_.jpg
    xujianbing_3_finished.jpg文件修改为 xujianbing_3_.jpg
    xujianbing_4_finished.jpg文件修改为 xujianbing_4_.jpg
    xujianbing_5_finished.jpg文件修改为 xujianbing_5_.jpg
    xujianbing_1_finished.png文件修改为 xujianbing_1_.png
    xujianbing_2_finished.png文件修改为 xujianbing_2_.png
    xujianbing_3_finished.png文件修改为 xujianbing_3_.png
    xujianbing_4_finished.png文件修改为 xujianbing_4_.png
    xujianbing_5_finished.png文件修改为 xujianbing_5_.png
    
    
    ###方法2
    [root@localhost sub_str]# ls *fini*
    xujianbing_1_finished.jpg  xujianbing_2_finished.jpg  xujianbing_3_finished.jpg  xujianbing_4_finished.jpg  xujianbing_5_finished.jpg
    xujianbing_1_finished.png  xujianbing_2_finished.png  xujianbing_3_finished.png  xujianbing_4_finished.png  xujianbing_5_finished.png
    [root@localhost sub_str]# for filename in `ls *fini*`; do  mv ${filename} ${filename/finished/}; done
    [root@localhost sub_str]# ll
    总用量 0
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_1_.jpg
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_1_.png
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_2_.jpg
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_2_.png
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_3_.jpg
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_3_.png
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_4_.jpg
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_4_.png
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_5_.jpg
    -rw-r--r--. 1 root root 0 9月  13 16:32 xujianbing_5_.png
    [root@localhost sub_str]# 
    
    

    注意:1)可以先考虑去掉单个文件的字符,2)利用变量子串去掉字符,3)``反引号获取命令执行结果