我有一堆文件。
academic-cap.svg arrow-narrow-right.svg
ban.svg chart-bar.svg
adjustments.svg arrow-narrow-up.svg
beaker.svg chart-pie.svg
...
...
我想改变
- 第一个字母和破折号之后为大写
- 删除破折号
- 最后添加图标
- 将文件名更改为 svelte.
AcademicCapIcon.svelte ArrowNarrowRightIcon.svelte
BanIcon.svelte ChartBarIcon.svelte
...
我该如何使用 Bash 脚本或终端。
答案1
使用基于 Perl 的rename
实用程序(有时也称为prename
):
rename -n 's/./\U$&/;s/-(.)/\U$1/g;s/\.svg$/Icon.svelte/' -- *.svg
上面的命令对当前目录中与文件名通配模式匹配的每个名称应用三个 Perl 替换操作*.svg
。
第一个替换 ,s/./\U$&/
将文件名的第一个字符替换为其自身的大写变体。
第二个替换 ,s/-(.)/\U$1/g
将破折号后面出现的每个字符替换为该字符的大写变体,同时删除破折号。
最后的替换,s/\.svg$/Icon.svelte/
,将.svg
文件名后缀替换为Icon.svelte
.
选项-n
导致rename
显示文件名转换但不执行。您稍后可以更改-n
为-v
详细重命名文件。
给出问题中的名称的示例:
$ ls
academic-cap.svg ban.svg
adjustments.svg beaker.svg
arrow-narrow-right.svg chart-bar.svg
arrow-narrow-up.svg chart-pie.svg
$ rename -n 's/./\U$&/;s/-(.)/\U$1/g;s/\.svg$/Icon.svelte/' -- *.svg
rename(academic-cap.svg, AcademicCapIcon.svelte)
rename(adjustments.svg, AdjustmentsIcon.svelte)
rename(arrow-narrow-right.svg, ArrowNarrowRightIcon.svelte)
rename(arrow-narrow-up.svg, ArrowNarrowUpIcon.svelte)
rename(ban.svg, BanIcon.svelte)
rename(beaker.svg, BeakerIcon.svelte)
rename(chart-bar.svg, ChartBarIcon.svelte)
rename(chart-pie.svg, ChartPieIcon.svelte)