如何使用 Bash/terminal 转换文件名

如何使用 Bash/terminal 转换文件名

我有一堆文件。

academic-cap.svg         arrow-narrow-right.svg   
ban.svg                  chart-bar.svg
adjustments.svg          arrow-narrow-up.svg      
beaker.svg               chart-pie.svg
...
...

我想改变

  1. 第一个字母和破折号之后为大写
  2. 删除破折号
  3. 最后添加图标
  4. 将文件名更改为 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)

相关内容