|
@@ -253,6 +253,120 @@ echo $result
|
|
error
|
|
error
|
|
```
|
|
```
|
|
|
|
|
|
|
|
+### 实例六:为带中文汉字数字的文件名重命名成以对应数字开头
|
|
|
|
+
|
|
|
|
+功能:见下边例子。
|
|
|
|
+
|
|
|
|
+例子:
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
+当前目录有如下文件:
|
|
|
|
+
|
|
|
|
+Zsh-开发指南(第一篇-变量和语句).md
|
|
|
|
+Zsh-开发指南(第七篇-数值计算).md
|
|
|
|
+Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md
|
|
|
|
+Zsh-开发指南(第九篇-函数和脚本).md
|
|
|
|
+Zsh-开发指南(第二篇-字符串处理之常用操作).md
|
|
|
|
+Zsh-开发指南(第五篇-数组).md
|
|
|
|
+Zsh-开发指南(第八篇-变量修饰语).md
|
|
|
|
+Zsh-开发指南(第六篇-哈希表).md
|
|
|
|
+Zsh-开发指南(第十一篇-变量的进阶内容).md
|
|
|
|
+Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md
|
|
|
|
+Zsh-开发指南(第十三篇-管道和重定向).md
|
|
|
|
+Zsh-开发指南(第十九篇-脚本实例讲解).md
|
|
|
|
+Zsh-开发指南(第十二篇-[[-]]-的用法).md
|
|
|
|
+Zsh-开发指南(第十五篇-进程与作业控制).md
|
|
|
|
+Zsh-开发指南(第十八篇-更多内置模块的用法).md
|
|
|
|
+Zsh-开发指南(第十六篇-alias-和-eval-的用法).md
|
|
|
|
+Zsh-开发指南(第十四篇-文件读写).md
|
|
|
|
+Zsh-开发指南(第十篇-文件查找和批量处理).md
|
|
|
|
+Zsh-开发指南(第四篇-字符串处理之通配符).md
|
|
|
|
+
|
|
|
|
+需要重命名成这样:
|
|
|
|
+
|
|
|
|
+01_Zsh-开发指南(第一篇-变量和语句).md
|
|
|
|
+02_Zsh-开发指南(第二篇-字符串处理之常用操作).md
|
|
|
|
+03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md
|
|
|
|
+04_Zsh-开发指南(第四篇-字符串处理之通配符).md
|
|
|
|
+05_Zsh-开发指南(第五篇-数组).md
|
|
|
|
+06_Zsh-开发指南(第六篇-哈希表).md
|
|
|
|
+07_Zsh-开发指南(第七篇-数值计算).md
|
|
|
|
+08_Zsh-开发指南(第八篇-变量修饰语).md
|
|
|
|
+09_Zsh-开发指南(第九篇-函数和脚本).md
|
|
|
|
+10_Zsh-开发指南(第十篇-文件查找和批量处理).md
|
|
|
|
+11_Zsh-开发指南(第十一篇-变量的进阶内容).md
|
|
|
|
+12_Zsh-开发指南(第十二篇-[[-]]-的用法).md
|
|
|
|
+13_Zsh-开发指南(第十三篇-管道和重定向).md
|
|
|
|
+14_Zsh-开发指南(第十四篇-文件读写).md
|
|
|
|
+15_Zsh-开发指南(第十五篇-进程与作业控制).md
|
|
|
|
+16_Zsh-开发指南(第十六篇-alias-和-eval-的用法).md
|
|
|
|
+17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md
|
|
|
|
+18_Zsh-开发指南(第十八篇-更多内置模块的用法).md
|
|
|
|
+19_Zsh-开发指南(第十九篇-脚本实例讲解).md
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+思路:
|
|
|
|
+
|
|
|
|
+1. 首先需要写将汉字数字转成阿拉伯数字的函数。
|
|
|
|
+2. 然后需要从文件名中截取汉字数字,然后转成阿拉伯数字。
|
|
|
|
+3. 拼接文件名,然后移动文件。
|
|
|
|
+
|
|
|
|
+实现:
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
+#!/bin/zsh
|
|
|
|
+
|
|
|
|
+# 转换数字的逻辑和上一个实例一样
|
|
|
|
+
|
|
|
|
+local -A table=(
|
|
|
|
+零 0
|
|
|
|
+一 1
|
|
|
|
+二 2
|
|
|
|
+三 3
|
|
|
|
+四 4
|
|
|
|
+五 5
|
|
|
|
+六 6
|
|
|
|
+七 7
|
|
|
|
+八 8
|
|
|
|
+九 9
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+convert() {
|
|
|
|
+ local result
|
|
|
|
+
|
|
|
|
+ if [[ $1 == 十 ]] {
|
|
|
|
+ result=一零
|
|
|
|
+ } elif [[ $1 == 十* ]] {
|
|
|
|
+ result=${1/十/一}
|
|
|
|
+ } elif [[ $1 == *十 ]] {
|
|
|
|
+ result=${1/十/零}
|
|
|
|
+ } elif [[ $1 == *十* ]] {
|
|
|
|
+ result=${1/十}
|
|
|
|
+ } else {
|
|
|
|
+ result=$1
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for i ({1..$#result}) {
|
|
|
|
+ result[i]=$table[$result[i]]
|
|
|
|
+
|
|
|
|
+ if [[ -z $result[i] ]] {
|
|
|
|
+ echo error
|
|
|
|
+ return 1
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ echo $result
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+for i (Zsh*.md) {
|
|
|
|
+ # -Z 2 是为了在前边补全一个 0
|
|
|
|
+ # 汉字数字的起始位置是固定的,直接数即可,不固定的话也可以用去除法
|
|
|
|
+ # 汉字数字的终止位置不固定,直接把“篇”以后的内容全去除
|
|
|
|
+ local -Z 2 num=$(convert ${i[11,-1]/%篇*})
|
|
|
|
+ mv -v $i ${num}_$i
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+
|
|
### 总结
|
|
### 总结
|
|
|
|
|
|
本文讲解了几个简单的 zsh 脚本,后续可能会补充更多个。
|
|
本文讲解了几个简单的 zsh 脚本,后续可能会补充更多个。
|