-1

我正在使用多文件重命名工具,它可以根据正则表达式模式重命名文件名。例如,我有这样的文件名:

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...)

如何构建正则表达式以从字符串中获取该数字?

4

1 回答 1

-1

并非总是可以预测将基于单个文件更改的系列中的值。例如,想象一下从 24 部电视剧的第 2 季中提取剧集编号。文件名中有三个可能的系列值24_02_07.avi24_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 FA Johnson的解决方案来找到文件名中最长的公共子字符串的

于 2013-01-02T04:47:28.370 回答