5

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

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

01011
02022
12193

至:

010101
020202
121903

我尝试了几件事:重命名、mv 等。与此类似(Bash - 在文件名中间添加 0)但不完全是

4

4 回答 4

14

你可以写:

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

(请参阅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
于 2013-08-10T03:35:34.787 回答
1

尝试使用下面的代码。

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

-n检查命令输出。

于 2018-08-12T11:26:48.917 回答
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
于 2013-08-10T03:33:51.297 回答
0

怎么样:

for file in * ;  do mv "$file" "${file:0:4}0${file:4:1}" ; done
于 2013-08-10T03:39:04.187 回答