Rename

MMV海量文件重命名

  • October 21, 2016

我無法確定 mmv 模式。我有一堆具有這種模式的影片文件:

my.program.name.season.NN.episode.NN.-.title.avi

我需要將它們移動到:

my.program.name.sNNeNN.title.avi

我似乎找不到正確的模式…

TL; 博士

rename -n 's/^((\w+\.+){3})(.).*\.(.*)\.(.).*\.(.*)\.\-(\..*)$/$1$3$4$5$6$7/' *
  • \w+匹配一個或多個單詞字元,即[a-zA-Z0-9_]+ $$ 1 $$
  • \.+匹配一個或多個 dot( .) 字元

$$ 2 $$ 注意\.匹配字元.。我們需要在正則表達式中使用as\.來表示具有特殊含義。被稱為轉義碼,它恢復後面字元的原始字面意思。.``.``\

  • (\w+\.+){3}最多匹配上述任何精度的 3 倍

$$ 1 $$,$$ 2 $$^從文件名的開頭(匹配名稱的開頭)開始的字元組。

這將匹配或返回my.program.name. 請注意,正則表達式周圍的額外括號用於匹配分組。分組匹配開始(和結束)並用於提供所謂的反向引用。反向引用包含儲存在特殊變數*$1*、$2$9中的匹配子字元串,其中 $1 包含與第一對括號匹配的子字元串,依此類推。

  • .元字元點 (.) 匹配任何單個字元。例如...匹配任意 3 個字元。因此,(.)我們匹配它的第一個season字元s
  • .*\.匹配上面單個字元之後的所有內容,直到.看到第一個字元。如您所見,我們沒有將其擷取為一組匹配項,因為我們希望將其從我們的名稱中刪除,即匹配項eason.
  • (.*)匹配上述匹配後的所有內容。這符合NN. 此處使用括號是因為我們希望將其保留在文件名中。
  • \.在上述匹配之後匹配單個點。.先後後繼NN
  • (.)再次使用這個我們匹配上述匹配後的第一個單個字元。這只會返回e
  • .*\.將匹配上述匹配之後的所有內容,直到 first .。會匹配pisode.
  • (.*)匹配上面匹配中最後一個匹配點之後的任何內容。這將匹配第二個NN
  • \.\-匹配一個點.,後跟一個破折號-。將匹配或返回.-
  • 最後(\..*)$匹配一個點.和後面的所有內容,直到文件名的結尾。$匹配文件名或輸入字元串的結尾。

注意:刪除-n選項以執行實際重命名。

引用自:https://unix.stackexchange.com/questions/174387