
次のようなファイルが数十個あります:
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
「」以降のすべてを削除したいのですが.mkv「
役に立つ正規表現をいくつか調べてみましたが、使い方がわかりません。
誰か助けてくれませんか?
答え1
rename
などに関する注記はprename
以下を参照:
- Debian/Ubuntu の名前変更ユーティリティが CentOS などの他のディストリビューションの名前変更ユーティリティと異なるのはなぜですか?
- プレネーム、名前変更、ファイル名変更など、すべての名前変更とは何ですか?
この回答では、util-linux 形式ではなく、Perl のバリアントが使用されています。つまり、次のようになります。
$ 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
)に 0 回以上一致します.*
。
結果.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