自动化的视频文件重命名(Automate renaming of video files)

2019-07-18 03:42发布

我有很多我想要重命名文件,并且它会带我很长的时间来手动完成它们。 他们的视频文件,而且通常这种格式 - “ - 集数 - SHOW名称EPISODE NAME”,因此,例如“绝命毒师 - 101 - 飞行员”。

我想这样做的是改变了“101”的一部分,以我自己的“S01E01”的约定。 我想,在一个系列的演出,这串唯一的顺序部分是最后一个号码,即。 S01E01,S01E02,S01E03,S01E04等..

会有人能够给我如何做这在Mac OS X上终端,我相信它是太复杂使用Automator或其他批量重命名的程序做意见...

谢谢

Answer 1:

for FOO in *; do mv "$FOO" "`echo $FOO | sed 's/\([^-]*\) - \([0-9]\)\([0-9][0-9]\)\(.*\)/\1 - S0\2E\3\4/g'`" ; done

这工作如果有小于10个赛季。



Answer 2:

以下解决方案:

  • 与两个3位和4位季节+情节说明符(例如作品107为季节1,插曲7,或1002季节10,第2集)
  • 展示先进的findbash技术,如:
    • 所述-regex初级由正则表达式匹配的文件名(而不是通配符模式,与-name
    • execdir到在同一目录中执行一个命令的每个匹配的文件(其中, {}只包含匹配文件
    • 调用的ad-hoc bash演示正则表达式匹配脚本=~并通过内置的报告捕捉组${BASH_REMATCH[@]}变量; 命令替换( $(...)到左垫用零的值; 变量扩展,以提取字符串( ${var:n[:m]}
# The regular expression for matching filenames (without paths) of interest:
# Note that the regex is partitioned into 3 capture groups 
# (parenthesized subexpressions) that span the entire filename: 
#  - everything BEFORE the season+episode specifier
#  - the season+episode specifier,
#  - everything AFTER.
# The ^ and $ anchors are NOT included, because they're supplied below.
fnameRegex='(.+ - )([0-9]{3,4})( - .+)'

# Find all files of interest in the current directory's subtree (`.`)
# and rename them. Replace `.` with the directory of interest.
# As is, the command will simply ECHO the `mv` (rename) commands.
# To perform the actual renaming, remove the `echo`.
find -E . \
 -type f -regex ".+/${fnameRegex}\$" \
 -execdir bash -c \
   '[[ "{}" =~ ^'"$fnameRegex"'$ ]]; se=$(printf "%04s" "${BASH_REMATCH[2]}");
   echo mv -v "{}" "${BASH_REMATCH[1]}S${se:0:2}E${se:2}${BASH_REMATCH[3]}"' \;


Answer 3:

下面的脚本会发现所有的.mp4与连续3个数字的一​​个字符串。 例如something.111.mp4。 将其转换为something.S01E11.mp4。 它也将排除任何样本文件。

find . ! -name "*sample*" -name '*.[0-9][0-9][0-9].*.mp4' -type f | while read filename; do mv -v "${filename}" "`echo $filename | sed -e 's/[0-9]/S0&E/;s/SS00E/S0/g'`";done;

像以前的脚本只会工作,如果少于10个赛季。

对于那些试图以个性化他们的当前目录树,我建议学习sed和找到命令。 他们是非常强大的,很简单,并允许您为文件名中替换任何字符串。



Answer 4:

使用perl rename执行它可以轻松地照顾适当的填充和适用于任何数量的seaons和发作(<100,但可以很容易地适应当前的格式):

$ ls -1 *.avi
My Show - 0301 - Qux.avi
My Show - 101 - Foo.avi
My Show - 102 - Bar.avi
My Show - 1102 - Blah.avi
My Show - 201 - Quux.avi

$ rename -n 's/- (\d+)(\d{2,}) -/sprintf("- S%02dE%02d -", $1, $2)/e' *.avi
My Show - 0301 - Qux.avi renamed as My Show - S03E01 - Qux.avi
My Show - 101 - Foo.avi renamed as My Show - S01E01 - Foo.avi
My Show - 102 - Bar.avi renamed as My Show - S01E02 - Bar.avi
My Show - 1102 - Blah.avi renamed as My Show - S11E02 - Blah.avi
My Show - 201 - Quux.avi renamed as My Show - S02E01 - Quux.avi

我想homebrew附带了正确的版本,所以它只是一个通过安装的事

$ brew install rename


文章来源: Automate renaming of video files