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

时间:2013-08-10 03:19:17

标签: bash command-line

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

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

01011
02022
12193

要:

010101
020202
121903

我尝试了几件事:重命名,mv等。与此类似(Bash - Adding 0's in the middle of a file name)但不完全

4 个答案:

答案 0 :(得分:10)

你可以写:

for file in * ; do
    mv ./"$file" "${file:0:4}0${file:4}"
done

(请参阅§3.5.3 "Shell Parameter Expansion" of the Bash Reference Manual${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

答案 1 :(得分:0)

对于Windows提示环境,假设所有文件都以相同名称开头,您可以使用重命名。

rename 0101* 01010*

对于分隔尺寸,您可以使用

rename ????* ????0*

真实的例子

Pasta de C:\temp

10/08/2013  00:37    <DIR>          .
10/08/2013  00:37    <DIR>          ..
10/08/2013  00:37                 0 teste.txt
               1 arquivo(s)              0 bytes
               2 pasta(s)   846.577.762.304 bytes disponíveis

C:\temp>rename ???* ???0*

C:\temp>dir
O volume na unidade C nao tem nome.
O Número de Série do Volume é 7868-7679

Pasta de C:\temp

10/08/2013  00:38    <DIR>          .
10/08/2013  00:38    <DIR>          ..
10/08/2013  00:37                 0 tes0e.txt
               1 arquivo(s)              0 bytes
               2 pasta(s)   846.577.762.304 bytes disponíveis

答案 2 :(得分:0)

怎么样:

for file in * ;  do mv "$file" "${file:0:4}0${file:4:1}" ; done

答案 3 :(得分:0)

尝试使用以下代码。

rename -v -n "s/(S01S0[0-2][0-9])/\$1-/" *

-n检查命令输出。