![通过shell脚本重命名多个文件](https://linux22.com/image/90640/%E9%80%9A%E8%BF%87shell%E8%84%9A%E6%9C%AC%E9%87%8D%E5%91%BD%E5%90%8D%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我想重命名以下文件 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
.
35
0.035
1
0.001
str0.00456a
0str0.00456a
str0.00456a
- 剩余的字符(例如:
0.0
for0.035
和0.00
for0.001
被传递给${i#
它,然后从变量的开头删除这些字符,导致35
for0.035
和1
for0.001
进一步阅读:参数扩展
答案2
和rename
(prename
):
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