通过shell脚本重命名多个文件

通过shell脚本重命名多个文件

我想重命名以下文件 0 , 0.001 ,0.002 , 0.003 ... , 0.035

变成 0 , 1 , 2 , 3 ... , 35

我该怎么做?

答案1

bash解决方案(如果启用了 extglob shell 选项 - 请参阅模式匹配手册

for i in 0.* ; do mv "$i" "${i##0.*(0)}" ; done
  • ${i##i从变量开头删除最长的匹配项
  • 0.匹配字符序列0.
  • *(0)表示 0 出现零次或多次

或@Costas 建议的解决方案,它不需要外部全局变量选项

for i in 0.* ; do mv "$i" "${i#${i%%[!0.]*}}" ; done
  • ${i%%i从变量末尾删除最长的匹配项
  • *任何字符,零次或多次
  • [!0.]字符以外的字符0.
  • 因此,有效地从第一个非或字符${i%%[!0.]*}删除直到结束。例如:被删除 for 、for 、for和整个字符串 for0.350.03510.001str0.00456a0str0.00456astr0.00456a
  • 剩余的字符(例如:0.0for0.0350.00for0.001被传递给${i#它,然后从变量的开头删除这些字符,导致35for0.0351for0.001

进一步阅读:参数扩展

答案2

renameprename):

rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

-n将进行试运行,如果您对所做的更改感到满意,请执行以下操作:

rename 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

例子:

% rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
0.001 renamed as 1
0.002 renamed as 2
0.003 renamed as 3
0.035 renamed as 35

相关内容