我下载的许多文件的文件名中都有垃圾邮件/垃圾邮件,例如[ 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:我是这个工具的作者。
- 3 回答
- 0 关注
- 475 浏览
添加回答
举报
0/150
提交
取消