Zac*_*cks 6 command-line bash files rename
极端新手试图弄清楚如何重命名目录中的一堆文件。我有数百个媒体文件,它们都遵循相同的文件名语法:
year - title of movie.avi
Run Code Online (Sandbox Code Playgroud)
我想编写一个脚本,从文件名的开头删除年份和“-”并将其附加到末尾。最终结果:
title of movie - year.avi
Run Code Online (Sandbox Code Playgroud)
(或类似的东西。我真的不需要破折号)
我在使用像下面这样的 for 循环时遇到的问题是,由于文件名中包含空格,因此我的脚本不断解析每个单词而不是每个完整文件名。
for file in $(ls)
Run Code Online (Sandbox Code Playgroud)
结果我还没有走得太远。
Too*_*ter 10
您可以将rename
命令与正则表达式一起使用:
rename 's/(\d+) - (.*)\.avi/$2 - $1.avi/' *.avi
解释:
rename
- 命令(您可能需要安装它)s/<match>/<replacement>/
(替代命令).*avi
.avi
在所有文件上运行上面匹配正则表达式:
(\d+)
匹配并捕获一组 ( $1
) 的一个或多个数字-
匹配字面意思-
(.*)
匹配任何内容并捕获组 ( $2
)\.avi
匹配.avi
(点被转义)替代品:
$2 - $1.avi
- 粘贴第二组(标题),然后粘贴破折号,然后粘贴第一组(年份),然后粘贴文件扩展名学习正则表达式,<3 正则表达式。避免使用 bash 循环文件,因为将字符串拆分为标记很难理解并且经常令人困惑,如果您不理解某些事情,您可能会忽略它们。