我有一堆文件,名字如下
some_random_str1 - Lecture X of Y some_random_str2.mp4
我想将这些名称更改为
Lecture X of Y - some_random_str1 some_random_str2.mp4
名称中只有恒定的模式,其中Lecture X of Y
和X
是Y
数字,并且不同名称中可能不同
对于使用 sed 或其他正则表达式工具的单行程序有什么想法吗?
答案1
使用您常用存储库中的rename
(Debian/ubuntu) 或prename
(RedHat/CentOS)(又名“Larry Wall 的 Perl 重命名”)命令:
rename -n 's/(.*) - (Lecture \d+ of \d+) (.*).mp4/$2 - $1 $3.mp4/' *.mp4
-n
是“试运行”。删除或替换为-v
以实际执行命令- 假设 X 和 Y 是数字
- 表达式可以是 Perl 可以接受的任何内容
- 表达式周围需要单引号来限制反斜杠的使用。
答案2
进入cd
包含文件的文件夹。
然后运行(可能用不同的路径替换 ./,而不是上面的 cd):
查找./-type f | 同时读取 n ; 执行 nn="$( 回声“$n”| sed -re 's/(.*) - ([0-9]+ 的讲座 [0-9]+) (.*).mp4/\2 - \1 \3.mp4/' )”; 回声“mv'$n''$nn'”; 完毕
验证生成的命令看起来是否正确。
如果发现一切都很好;再次运行相同的操作,但| bash
附加内容。