我有很多文件,例如file_022.bmp,file_023.bmp ... file_0680.bmp。我需要将这些重命名为更方便的东西,例如file_1.bmp,file_2.bmp ... file_658.bmp。
我可以写一个bash脚本来为我做这个吗?感谢您的帮助和建议。
Luke H
答案 0 :(得分:5)
如果您使用的是基于debian的Linux系统,那么您可以使用重命名脚本来接受regular expressions来重命名文件。还有一些info,因为我发现很难找到手册页。
e.g。
harald@Midians_Gate:~$ ls p*.php
parse.php pd.php pgrep.php preg_based.php proc.php
假设我想将扩展名更改为.perl并在文件名前添加名称 然后我用命令:
rename -n 's/([a-z]*)\.php/file_$1.perl/' p*.php
会给出
parse.php renamed as file_parse.perl
pd.php renamed as file_pd.perl
pgrep.php renamed as file_pgrep.perl
preg_based.php renamed as preg_file_based.perl
proc.php renamed as file_proc.perl
我选择并捕获基本文件名([a-z]*)
,然后在替换$1
中使用它并附加.perl
并将$ 1添加到常规字符串file_
-n选项使其无需更改任何内容即可进行测试
正如您在本示例中所看到的,您需要正确考虑选择正则表达式,或者您获得上述preg_based.php之类的情况,您需要file_preg_based.perl :)
为了弥补这一点,我需要在这里使用([a-z_]*)
这是我继续坚持debian的众多原因之一,我很乐意找到其他非debian系统的等价物: - /
答案 1 :(得分:4)
如果你有文件a.bmp,b.bmp,c.bmp 并且您希望以file_1.bmp,file_2.bmp,file_3.bmp
结束使用bash:
mkdir result
index=1
for i in *.bmp
do
mv "$i" "result/file_"$((index++)).bmp
done
注释: 建议使用子目录以避免意外覆盖看起来像file_xx.bmp
的文件如果在扩展后有太多文件无法放入命令行,您可以使用以下内容:
mkdir result
index=1
find . -name "*.bmp" | while read i
do
echo mv "$i" "result/file_"$((index++)).bmp
done
检查输出后删除'echo'