我有许多使用命名方案的视频文件,例如
一些单词-SxxExx.extension
这是我的偏好。不幸的是我有很多这种格式的文件
一些单词-SxxExx-单词-我想要删除.extension
我需要自动删除 Exx 部分之后的所有内容。
答案1
假设x
是占位符,zmv
应该能够做到这一点
zmv -nv '(*S??E??)*.ext' '$1.ext'
% touch foo-S01E02-garbage.ext bar-S07E17-moregarbage.ext
% zmv -nv '(*S??E??)*.ext' '$1.ext'
mv -- bar-S07E17-moregarbage.ext bar-S07E17.ext
mv -- foo-S01E02-garbage.ext foo-S01E02.ext
您还可以使用'(*S[0-9][0-9]E[0-9][0-9])*.ext'
仅匹配数字来代替x
。
或者如果你想使用sed
:
for f in *.ext; do
echo mv -n "$f" "$(echo "$f" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.ext/\1.ext/')"
done
或者使用 Perlrename
命令(显然现在file-rename
在 Debian 中被称为):
file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext
(删除echo
前面的mv
以及和-n
的标志来zmv
实际file-rename
进行重命名。mv -n
另一方面告诉它不要覆盖现有文件,这至少在 GNU 中有效mv
。)
答案2
怎么样
$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension
(尽管我希望 zsh 爱好者能够使用 shell 替换更简单地做到这一点)。