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

Regex 使用正则表达式重命名多个文件,regex,linux,file-rename,Regex,Linux,File Rename,我从网上下载了一些文件。在这些文件的名称字段中,每个'字符都被“%20”替换。我想重命名所有这些,但文件数量太多。因此,手动方法将是笨拙的。我知道从命令行正则表达式这可以做到,但我不是很熟悉它。所以不需要什么帮助 总结是,我想通过将所有“%20”模式替换为”来重命名目录中的所有文件。我怎么做 样本: 17%20Clipping.cpp --> 17 Clipping.cpp 14%20Mouse%20(Button)%20Listener.cpp --> 14 Mouse (Butt

我从网上下载了一些文件。在这些文件的名称字段中,每个
'
字符都被
“%20”
替换。我想重命名所有这些,但文件数量太多。因此,手动方法将是笨拙的。我知道从命令行正则表达式这可以做到,但我不是很熟悉它。所以不需要什么帮助

总结是,我想通过将所有
“%20”
模式替换为
来重命名目录中的所有文件。我怎么做

样本:

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

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

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

rename 's/\.bak$//' *.bak
要将大写名称转换为小写名称,可以使用

rename 'y/A-Z/a-z/' *
你的回答是:

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

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

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

rename 's/\.bak$//' *.bak
要将大写名称转换为小写名称,可以使用

rename 'y/A-Z/a-z/' *
你的回答是:

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

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

我建议不要在文件名中加空格(可能改用下划线)。无论如何,这里有一个命令可以执行此操作:

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

模式中需要反斜杠,因为在本例中,
%
是一个元字符(末尾匹配)。

是一个perl脚本来完成此操作,或者如果您使用zshell,您可以查看
zmv
,谢谢您的链接。实际上,我想学习使用linux命令,因为它是一个通用工具。perl脚本在任何地方都不适用于我。这是一个perl脚本,或者如果您使用zshell,您可以查看
zmv
,谢谢您的链接。实际上,我想学习使用linux命令,因为它是一个通用工具。perl脚本不会在任何地方都可用。首先定义一个正则表达式(
's/%20/'
),然后将其应用于与第二个正则表达式匹配的每个文件(
*.cpp
)不,我的意思是,请按字母顺序解释第一个表达式。我搞不懂。最好读一读关于re的书
s
表示在两个前斜杠之间更改匹配表达式,在后两个斜杠之间更改匹配表达式,这里是
'
在使用基于模式的重命名时要非常小心。从手册页:“更名没有任何保障措施。如果用户具有重写文件名的权限,则该命令将毫无疑问地执行该操作。例如,当命令以root用户身份在/lib目录中运行时,结果可能非常严重。除非您真正知道自己在做什么,否则请务必在运行该命令之前进行备份。“谢谢,这正是我想知道的。首先定义一个正则表达式(
's/%20/'
),然后将其应用于与第二个正则表达式匹配的每个文件(
*.cpp
)不,我是说,请解释第一个表达式的字母。我看不懂。最好读一读re。
s
意味着在两个第一个斜杠之间更改匹配表达式,在第二个两个斜杠之间更改匹配表达式,这里是
请非常小心基于模式的重命名。从手册页上看:“重命名没有任何安全措施。如果用户具有重写文件名的权限,则该命令将毫无疑问地执行该操作。例如,当命令以root用户身份在/lib目录中运行时,结果可能非常严重。除非您真正知道自己在做什么,否则请务必在运行命令之前进行备份。“谢谢,这正是我想知道的。您可以使用内置变量扩展和替换来代替生成新进程:
mv$I${I/%20/}
。您可以使用内置变量扩展和替换来代替生成新进程:
mv$i${i/%20/}