在Linux中重命名多个文件shell

时间:2012-06-19 20:18:20

标签: linux file bash

我有很多文件,例如file_022.bmp,file_023.bmp ... file_0680.bmp。我需要将这些重命名为更方便的东西,例如file_1.bmp,file_2.bmp ... file_658.bmp。

我可以写一个bash脚本来为我做这个吗?感谢您的帮助和建议。

Luke H

2 个答案:

答案 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'