Naf*_*Kay 5 perl regular-expression rename
我目前正在尝试重命名大量文件,并且一直在使用非常笨拙的方法来这样做,例如:
rename 's:(.*)\.MOV:$1.mov:g' *.MOV
rename 's:(.*)\.JPG:$1.jpg:g' *.JPG
Run Code Online (Sandbox Code Playgroud)
我真正想做的是能够使用'y'sed
运算符组合所有这些命令。显然,使用此运算符,您可以将项目转换为小写。问题是我只需要转换扩展名。有没有办法使用这个命令来做到这一点?我需要基本上改造捕获组在下面的表达式为小写:^.+\.(.+)$
。有没有办法做到这一点?我对这些类型的转换有点陌生。
根据rename
语法判断,这是在 Debian、Ubuntu 和衍生产品上发现的基于 Perl 的版本。您不能使用tr
运算符,因为它作用于整个字符串。但是你可以匹配的扩展,IT和小写it用\L
。
rename 's/\.[^.]*$/\L$&/' *.JPG *.MOV
Run Code Online (Sandbox Code Playgroud)
这里没有必要,但如果正则表达式匹配的部分多于您想要小写的部分,您可以将要匹配的部分放在一个组中:
rename 's/\.([^.]*)$/.\L$1/' *.JPG *.MOV
Run Code Online (Sandbox Code Playgroud)
更换*.JPG *.MOV
用*.*
在所有文件上执行任何扩展的。在 bash ?4.3(以及 bash 4.0-4.2 中,需要注意的是,这也会遍历到目录的符号链接),您可以轻松地对子目录中的文件进行操作,以此类推:
rename 's/\.[^.]*$/\L$&/' **/*.*
Run Code Online (Sandbox Code Playgroud)
对于zsh 粉丝(:r
和:e
修饰符将扩展名与文件的其余部分隔离开来):
autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}' # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}' # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}' # all extensions, recursive directory traversal
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2921 次 |
最近记录: |