syn*_*ror 9 debian perl rename arithmetic
假设我有五个 mp3 文件:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Run Code Online (Sandbox Code Playgroud)
现在我快速收听文件(只有控制台上的 mplayer 可以解决问题),我发现曲目顺序错误。05实际上是02,其余的必须重命名。所以首先我会做一个临时重命名:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Run Code Online (Sandbox Code Playgroud)
现在我们需要一个“转变”:02 应该变成 03,03 应该变成 04,04 应该变成 05。为了尽量减少混淆,ex-05(现在是 00)稍后会被mv
编辑。
我的方法是这样的:(perl rename
,Larry Wall,Debian 上的默认设置)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
Run Code Online (Sandbox Code Playgroud)
以及(稍后,经过一些更多的 RTFM'ing)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Run Code Online (Sandbox Code Playgroud)
它们都/e[val]
不起作用,特别是因为修饰符除了评估之外不接受任何其他内容,并且一旦您尝试将评估与字符串结合起来就会抛出错误。该bash
能做到这一点就好了,例如, foo$((1+6))
将被评估到foo7
。
那么我该怎么做(首选单行,不打算为此编写一个完整的独立脚本)?
你几乎拥有它。您只需要在/e
-modified 替换中使用引号和点运算符使文字字符串和字符串连接显式。
rename 's/0([2-4])([\s\S]+)/"0".($1+1).$2/e' *
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1123 次 |
最近记录: |