Awk

正則表達式後刪除部分名稱

  • January 22, 2019

我有許多使用命名方案的影片文件,例如

some-words-SxxExxx.extension

這是我的偏好。不幸的是,我有很多這種格式的文件

some-words-SxxExx-words-I-want-to-remove.extension

我需要在 Exx 部分之後自動刪除所有內容。

假設x’s 是佔位符,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

(刪除echofrom 前面mv-n標誌zmvfile-rename實際重命名的標誌。mv -n另一方面,告訴它不要覆蓋現有文件,這至少在 GNU 中有效mv。)

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