将字符添加到文件名的中间

ste*_*ino 3 bash command-line

我需要在文件名的中间添加一个字符,我需要在同一目录中为大约8000个文件执行此操作.我正在寻找一个命令行选项:

示例(需要重命名的所有文件都是五位数,它们位于包含不需要重命名的其他六位数文件名的目录中):

01011
02022
12193
Run Code Online (Sandbox Code Playgroud)

至:

010101
020202
121903
Run Code Online (Sandbox Code Playgroud)

我尝试了几件事:rename,mv等.与此类似(Bash - 在文件名中间添加0)但不完全

rua*_*akh 10

你可以写:

for file in * ; do
    mv ./"$file" "${file:0:4}0${file:4}"
done
Run Code Online (Sandbox Code Playgroud)

(参见Bash参考手册§3.5.3"Shell参数扩展"的说明和.)${parameter:offset}${parameter:offset:length}

编辑添加:如果您只想捕获特定文件子集,则可以更改*为更具体的模式,例如[0-9][0-9][0-9][0-9][0-9](匹配由五位数组成的文件名).

顺便说一句,你可以在一行上格式化整个事物:

for file in [0-9][0-9][0-9][0-9][0-9] ; do mv "$file" "${file:0:4}0${file:4}" ; done
Run Code Online (Sandbox Code Playgroud)