使用正则表达式重命名多个文件

时间:2013-11-27 19:09:26

标签: regex linux file-rename

我从互联网上下载了一些文件。在这些文件的名称字段中,每个' '字符都替换为"%20"。我想重命名所有这些,但文件数量太高。所以手动方法会很笨拙。我从命令行了解正则表达式,这可以完成,但我不是很熟悉它。所以很少需要帮助。

总结是,我想通过用"%20"替换所有" "模式来重命名目录中的所有文件。我该怎么办?

样品:

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

2 个答案:

答案 0 :(得分:3)

您可以使用接受正则表达式

的命令rename重命名一组文件

例如,要重命名与“* .bak”匹配的所有文件以剥离扩展名,您可能会说

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

要将大写名称翻译为较低的名称,请使用

rename 'y/A-Z/a-z/' *

和你的回答:

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

答案 1 :(得分:2)

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

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

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