用正则expression式重命名多个文件

我从网上下载了一些文件。 在这些文件的名称字段中,每个' '字符被replace为"%20" 。 我想重命名所有这些文件数量太高。 所以手工方法会很笨拙。 我从命令行知道正则expression式这可以做,但我不是很熟悉它。 所以没有什么帮助。

摘要是,我想通过用"%20"replace所有"%20"模式来重命名目录中的所有文件。 我该怎么做?

样品:

 17%20Clipping.cpp --> 17 Clipping.cpp 14%20Mouse%20(Button)%20Listener.cpp --> 14 Mouse (Button) Listener.cpp 

Solutions Collecting From Web of "用正则expression式重命名多个文件"

您可以使用接受正则表达式的命令rename来重命名一组文件

例如,要重命名所有匹配“* .bak”的文件来剥离扩展名,可以这样说

 rename 's/\.bak$//' *.bak 

要将大写字母的名字翻译成较低的名字,你可以使用

 rename 'y/AZ/az/' * 

和你的答案:

 rename 's/%20/ /' *.cpp 

我建议不要在文件名中加空格(也许使用下划线)。 无论如何,这是一个可以做到的命令:

 for i in *%20*; do new=$(echo $i|sed 's/%20/ /'); echo mv $i "$new"; done 

在目前的形式下,它只是打印将执行的命令。 一旦你确定它做了你想要的,删除echo

正如@ronmrdechai所说,以下是一个改进:

 for i in *%20*; do echo mv $i "${i/\%20/ }"; done 

模式中需要反斜杠,因为在这种情况下, %是元字符(在结尾处匹配)。