我正在使用多文件重命名工具,可以根据正则表达式模式重命名文件名。例如,我有这样的文件名:
Otrazenie.(01.serija.iz.12).2011.XviD.SATRip.RiperAM.avi
Otrazenie.(02.serija.iz.12).2011.XviD.SATRip.RiperAM.avi
Otrazenie.(03.serija.iz.12).2011.XviD.SATRip.RiperAM.avi
或者喜欢这些:
Beauty.and.the.Beast.S01E01.LostFilm.TV.avi
Beauty.and.the.Beast.S01E02.LostFilm.TV.avi
Beauty.and.the.Beast.S01E03.LostFilm.TV.avi
这里我们只有字符串里面的数字改变了(01,02,03 ...)
如何构建一个RegEx来从字符串中获取该数字?
答案 0 :(得分:-1)
并不总是能够预测将基于单个文件更改的系列中的值。例如,想象从24电视剧的第2季中拉出剧集编号。文件名24_02_07.avi
中有三个可能的系列值。在显示下一个文件名(24_02_08.avi
)之前,不清楚哪个数字是系列值。
考虑到这一点,您可以运行以下bash脚本。它首先在当前目录的文件中找到最长的公共前缀。然后它会在每个文件名中找到前缀后面的数字:
set -- *
files=$#
prefix=$1
while [ -n "$prefix" ]; do
set -- $prefix*
[ $# -eq $files ] && break
prefix=${prefix%?}
done
ls | sed -e "s/$prefix\([0-9]*\).*/\1/g" | sort -nu
我假设因为没有提到的语言,我们在命令行上。
使用Chris F.A. Johnson的finding the longest common substring among filenames解决方案找到前缀。