为了账号安全,请及时绑定邮箱和手机立即绑定

基于多种模式重命名文件的更好方法

基于多种模式重命名文件的更好方法

www说 2019-10-12 10:22:56
我下载的许多文件的文件名中都有垃圾邮件/垃圾邮件,例如[ www.crap.com ] file.name.extwww.crap.com - file.name.ext我想出了两种方法来处理它们,但它们都显得笨拙:带有参数扩展:if [[ ${base_name} != ${base_name//\[+([^\]])\]} ]]then    mv -v "${dir_name}/${base_name}" "${dir_name}/${base_name//\[+([^\]])\]}" &&        base_name="${base_name//\[+([^\]])\]}"fiif [[ ${base_name} != ${base_name//www.*.com - /} ]]then    mv -v "${dir_name}/${base_name}" "${dir_name}/${base_name//www.*.com - /}" &&        base_name="${base_name//www.*.com - /}"fi# more of these type of statements; one for each type of frequently-encountered pattern然后用echo / sed:tmp=`echo "${base_name}" | sed -e 's/\[[^][]*\]//g' | sed -e 's/\s-\s//g'`mv "${base_name}" "{tmp}"我觉得参数扩展是两者中最差的一个,但我喜欢它,因为我能够保留分配给文件的相同变量,以便在重命名后进行进一步处理(上面的代码用于为每个文件调用的脚本中)文件下载完成后)。因此,无论如何,我希望有一种更好/更清洁的方法来执行上述操作,以使比我自己更有学识的人可以向我展示,最好以一种使我能够轻松地将旧/原始变量重新分配给新/重命名文件的方式。谢谢
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您可以使用rnm


rnm -rs '/\[crap\]|\[spam\]//g' *.ext

上面的内容将从文件名中删除[crap]或删除[spam]。


您可以通过终止多个选项;或使其重载来传递多个正则表达式模式-rs。


rnm -rs '/[\[\]]//g;/\s*\[crap\]//g' -rs '/crap2//' *.ext

此替换字符串的一般格式为 /search_part/replace_part/modifier


search_part:要搜索的正则表达式。

replace_part:要替换为的字符串

修饰符:i(不区分大小写),g(全局替换)

大写小写:


形式的替换字符串/search_part/\c/modifier将使文件名的选定部分(通过正则表达式search_part)变为小写,而\C替换部分中的(大写字母\ C)将使其变为大写。


rnm -rs '/[abcd]/\C/g' *.ext

## this will capitalize all a,b,c,d in the filenames

如果您有许多需要处理的正则表达式模式,则将这些模式放入文件中,然后使用-rs/foption 传递文件。

rnm -rs/f /path/to/regex/pattern/file *.ext

您可以在这里找到其他示例。


注意:


rnm使用PCRE2(修订的PCRE)正则表达式。

您可以通过运行撤消不需要的重命名操作 rnm -u

PS:我是这个工具的作者。


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 475 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信