如何用 shell 脚本优雅的遍历文件夹内所有文件名的中文字符并替换?

2022-09-04 23:04:15 +08:00
 RayGZJ
因为在收集学生的报名考试资料,但有些班主任不是完全按照我发的格式命名文件照片,目前我已将所有证件照都移动至一个文件夹内,我需要身份证号命名照片
如:
32000000000000123.jpg
…..

而实际文件名是这样的
文件内容
张三 32000000000000123.jpg

32000000000000123 李四.jpg

用了正则脚本\u4E00-\u9FA5 还是不行 是我打开方式问题吗?
3629 次点击
所在节点    Linux
44 条回复
aloxaf
2022-09-06 15:15:12 +08:00
你俩竟然还在争论

说实话传统 shell 再难用也没办法,地位已经根深蒂固了。新兴 shell 再吹也没用,无论如何都入不了主流(除了 pwsh 那种捆绑的)。

@Jirajine #39

> bash 就是语言表达能力不足,才不得不把 glob 做的更复杂

bash 的 glob 说实话不算复杂,屎上雕花的 zsh 那才是……怎么说呢,每次看到那些占满整行的单条表达式,都令我对作者肃然起敬

@wxf666 #40

> 🔁IFS=$'\n' 后,❓不就可以像 elvish 那样,不用处理啥空格了嘛?

这样未必不出问题,毕竟 \n 也是个合法的,可能出现在任意地方的字符。

我觉得 word splitting 糟糕的点主要在于——它是全局的、隐式的,这就导致了它成为坑人的好手。
wxf666
2022-09-06 17:21:30 +08:00
@aloxaf 算交流吧,都一起骂了 bash 的难用的地方,@Jirajine 也介绍了 elvish 优越之处,我也有自己的保留意见


感觉我还能接受新鲜事物。不写脚本的话,尝试换下 shell 也是可以的(反正就自己用而已。好用就赚,难用就换~)


听你这么一说,会不会 @Jirajine 说的『 bash 的 glob 复杂』,其实是『 zsh 的 glob 复杂』的意思。。

原本我思来想去,即使算上 extended glob ,bash 的 glob 也和复杂沾不上边儿才对。。


elvish 不也是按照 \n 切割 (...) 嘛。。

反正被折磨多后,一般都用 "..." 包裹住就是了(然而还有个 ! 。。)
Jirajine
2022-09-06 23:08:00 +08:00
@wxf666 shell 的 变量 expansion 可以说是最糟糕的设计之一,一个变量的值,与如何引用它有关。而 IFS 就是控制如何引用变量的方式,所以非常易错。每当你引用含空格字符串的时候,都得设置 IFS ,包括变量赋值、复制等,操作其他字符串的时候还得再改回去。
elvish 在这方面和所有正常的编程语言一样:变量的值是固定的,不允许在引用变量时自定义各种奇奇怪怪的 evaluate 的方式,因而和 Python 等正常编程语言一样,evaluate 时不需要 quoting 。

elvish 不会更改你的变量内容,只是为了让使用传统*nix 命令行工具的 byte 输入输出格式更方便,很多接受多个 string 对象管道输入的命令(包括 (..) 输出捕获),也会接受 byte 流,并默认将 byte 流按换行符分割后作为多个 string 输入。其实这也是传统*nix 命令行工具约定俗成的格式,只不过 evlish 里真正有类型了而已。默认相当于 from-lines ,对于需要其他格式的输入则可以用 from-json (从 byte 流读取输入并反序列化 json 成结构化对象)、slurp (从 byte 流读取所有数据并存入一个 string 对象里输出)等等。
Jirajine
2022-09-06 23:13:39 +08:00
@aloxaf 屎上雕花 这个形容太贴切了。bash 确实比 zsh 简单不少,但特性也不少(当然是必要的),不同的是 bash 是在 POSIX sh 上雕花,而 zsh 是同时在 POSIX sh 、bash 、ksh 上雕花。可能因为使用 bash glob 的时候还得同时考虑怎么 quoting 、是否含空格,我才感觉它复杂吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX