我需要在文件名的中间添加一个字符,我需要在同一目录中为大约8000个文件执行此操作。我正在寻找一个命令行选项:
示例(需要重命名的所有文件都是五位数,它们位于包含不需要重命名的其他六位数文件名的目录中):
01011
02022
12193
要:
010101
020202
121903
我尝试了几件事:重命名,mv等。与此类似(Bash - Adding 0's in the middle of a file name)但不完全
答案 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
检查命令输出。