我需要在文件名中间添加一个字符,我需要对同一目录中的大约 8000 个文件执行此操作。我正在寻找一个命令行选项:
示例(所有需要重命名的文件都是五位数,它们位于包含其他不需要重命名的六位数文件名的目录中):
01011
02022
12193
至:
010101
020202
121903
我尝试了几件事:重命名、mv 等。与此类似(Bash - 在文件名中间添加 0)但不完全是
我需要在文件名中间添加一个字符,我需要对同一目录中的大约 8000 个文件执行此操作。我正在寻找一个命令行选项:
示例(所有需要重命名的文件都是五位数,它们位于包含其他不需要重命名的六位数文件名的目录中):
01011
02022
12193
至:
010101
020202
121903
我尝试了几件事:重命名、mv 等。与此类似(Bash - 在文件名中间添加 0)但不完全是
你可以写:
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
尝试使用下面的代码。
rename -v -n "s/(S01S0[0-2][0-9])/\$1-/" *
-n
检查命令输出。
对于假设所有文件都以相同名称开头的 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
怎么样:
for file in * ; do mv "$file" "${file:0:4}0${file:4:1}" ; done