次の数十のファイルがあります。
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
そしてzsh
~のzmv
:
autoload zmv
zmv -v '(*.mkv)*' '$1'
削除された部分一番右.mkv
ファイル名にエントリがあります(foo.mkv-bar.mkv-whatever
に名前が変更されましたfoo.mkv-bar.mkv
)。
~のため一番左(ファイル名をに変更)、「例外」を使用して次に終わりますが、後に1つ以上の文字がない文字列を一致させることでfoo.mkv
置き換えることができます。*.mkv
*.mkv~*.mkv?*
.mkv
.mkv
~
グローバルオペレータ。
答え4
スクリプトバッシュから
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done