
我有幾十個文件,例如:
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
我想刪除“之後的所有內容”.mkv」
我嘗試尋找一些對我有幫助的正則表達式,但我不明白如何使用它們。
有人可以幫我嗎?
答案1
rename
等的註解prename
參見:
在這個答案中使用 Perl 變體,而不是 util-linux 的一種形式。正如不:
$ rename --version
rename from util-linux 2.31.1
但:
$ rename --version
/usr/bin/rename using File::Rename version 0.20
或類似的。
使用 Perl 重新命名:
rename 's/\.mkv.*/.mkv/s' ./*.mkv*
首先使用該-n
選項以確保它符合您的要求。
rename -n 's/\.mkv.*/.mkv/s' ./*.mkv*
簡而言之:
s/\.mkv.*/.mkv/s
是:
substitute/<THIS>/<WITH THIS>/s
\.mkv.*
匹配文字點,\.
然後匹配字串mkv
,最後匹配任何字元(包括\n
您需要s
標誌的字元)零次或多次.*
。
結果替換.mkv<anything>
為.mkv
.
有一些工具可以幫助閱讀和建立表達式,例如https://regex101.com/
答案2
在bash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
答案3
答案4
在腳本 bash 中
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done