我当前的工作目录中有 4 个文件夹。每个文件夹包含多个按以下格式命名的文件:
HEXA DECA - Season 01 Episode 01 - name of episode
HEXA DECA - Season 01 Episode 02 - name of episode
我想将其重命名为:
HE'XA DECA - S01E01 - name of episode
HE'XA DECA - S01E02 - name of episode
sed
对我来说有点太令人畏惧了。实现这一目标的最佳方法是什么?
答案1
我发现这vidir
是解决这些问题最灵活和透明的解决方案。在那里,您只需通过任何方式(在 VIM 或其他编辑器中)编辑带有文件名的文本文件,然后更改就会应用。
答案2
就我个人而言,我用于mmv
此类任务。其他人使用rename
.我的尝试(显然没有经过测试,所以首先尝试使用该-n
选项):
for dir in ....; do
( cd "$dir"; mmv -r "HEXA DECA - Season ?? Episode ?? - *" "HE'XA DECA - S#1#2E#3#4 - #5" )
done
我cd
先入$dir
而不做mmv "$dir/..."
这也是可以的。这是为了避免您的目录可能包含 mmv 的特殊字符,例如?
或*
。
答案3
rename
命令执行您需要的操作:
find . -type f -exec rename "s/^(.*\/)HEXA DECA - Season ([0-9]*) Episode ([0-9]*) (.*)\$/\$1HE'XA DECA - S\$2E\$3 \$4/" {} \;
我们需要反斜杠 'cos 单引号中'
不能转义,但双引号中我们必须转义$
字符。
在这里,我们找到目录和子目录中的所有文件并尝试重命名它们。
s/regexp/smth
将把所有regexp
匹配替换为smth
.
^(.*\/)
是路径的第一部分,没有基本名称的所有内容,保存到\$1
.
HEXA DECA - Season
和Episode
是不会保存的部分,但它们是用于匹配的模板。
([0-9]*)
s 是季数和集数,保存到\$2
和\$3
。
(.*)$
是字符串的最后一部分,包含剧集名称\$4
。
在第二部分中,s///
我们将\$N
s 替换为我们想要看到的模式。