批量修改文件名

创建素材

  1. shuai@shuais-MacBook-Pro batchRename % touch image_{1..5}_game.jpg
  2. shuai@shuais-MacBook-Pro batchRename % touch image_{1..5}_name.png
  3. shuai@shuais-MacBook-Pro batchRename % ls
  4. image_1_game.jpg image_2_name.png image_4_game.jpg image_5_name.png
  5. image_1_name.png image_3_game.jpg image_4_name.png
  6. image_2_game.jpg image_3_name.png image_5_game.jpg

分析思路:第一步

对单个文件进行重命名

  1. shuai@shuais-MacBook-Pro batchRename % mv image_1_game.jpg image_1.jpg
  2. shuai@shuais-MacBook-Pro batchRename % ls -l
  3. total 0
  4. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.jpg
  5. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1_name.png
  6. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2_game.jpg
  7. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2_name.png
  8. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3_game.jpg
  9. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3_name.png
  10. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4_game.jpg
  11. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4_name.png
  12. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5_game.jpg
  13. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5_name.png

第二步:子串匹配截取

利用 ${变量//pattern/string} 表示用string替代所有的pattern

  1. shuai@shuais-MacBook-Pro batchRename % f=image_1_name.png
  2. shuai@shuais-MacBook-Pro batchRename % echo ${f//_name/}
  3. image_1.png

第三步:echo 反引号+linux命令

  1. # echo `linux命令` 可以输出命令的执行结果
  2. shuai@shuais-MacBook-Pro batchRename % echo `date`
  3. 2022 420 星期三 225702 CST
  4. # 使用mv和反引号加linux命令,动态修改名称
  5. shuai@shuais-MacBook-Pro batchRename % f=image_1_name.png
  6. shuai@shuais-MacBook-Pro batchRename % mv $f `echo ${f//_name/}`
  7. shuai@shuais-MacBook-Pro batchRename % ls -l
  8. total 0
  9. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.jpg
  10. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.png
  11. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2_game.jpg
  12. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2_name.png
  13. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3_game.jpg
  14. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3_name.png
  15. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4_game.jpg
  16. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4_name.png
  17. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5_game.jpg
  18. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5_name.png

第四步:利用for循环

利用循环去掉剩下的所有jpg文件的_name字符

  1. # `ls *game*jpg` 列出所有未处理过的jpg
  2. shuai@shuais-MacBook-Pro batchRename % for filename in `ls *game*jpg`;do echo $filename;done
  3. image_2_game.jpg
  4. image_3_game.jpg
  5. image_4_game.jpg
  6. image_5_game.jpg
  1. shuai@shuais-MacBook-Pro batchRename % for filename in `ls *game*jpg`;do mv $filename `echo ${filename//_game/}`;done
  2. shuai@shuais-MacBook-Pro batchRename % ls -l
  3. total 0
  4. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.jpg
  5. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.png
  6. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2.jpg
  7. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2_name.png
  8. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3.jpg
  9. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3_name.png
  10. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4.jpg
  11. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4_name.png
  12. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5.jpg
  13. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5_name.png
  1. shuai@shuais-MacBook-Pro batchRename % for filename in `ls *name*png`;do mv $filename `echo ${filename//_name/}`;done
  2. shuai@shuais-MacBook-Pro batchRename % ls -l
  3. total 0
  4. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.jpg
  5. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_1.png
  6. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2.jpg
  7. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_2.png
  8. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3.jpg
  9. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_3.png
  10. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4.jpg
  11. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_4.png
  12. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5.jpg
  13. -rw-r--r-- 1 shuai staff 0 4 20 22:32 image_5.png