シェルでは、次のように簡単に実行できます:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
シェルは、通常のグロブと ${var%pattern}
だけでファイル名のリストを生成できます。 変数 var
の文字列の末尾から (最短の) 一致するパターンを削除します .最終拡張子は常に .avi
なので 、パターンで削除して元に戻しました。引用符を使用すると、これは Fancy Name for a Show.s01e01]Asdf.avi
のようにスペースを含むファイル名でも機能するはずです
これにより、ファイルの名前が変更されます。任意の数の英数字を表すには \w* が必要です。
rename 's/\]\w*//' *
参照:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
これはあらゆる種類の非現実的です - 他の答えははるかに速くて短いです - しかし...
PowerShell を使用できます。 Microsoft は最近、それをオープンソース化し、クロスプラットフォームにしました。お使いの OS のダウンロードとインストールの手順については、「PowerShell を入手する」セクションを参照してください。
インストールしたら、次の簡単なスクリプトを使用できます:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
基本的に、*]*.avi
に一致するファイルである現在のディレクトリ内の各オブジェクトを通過します 、ブラケットの前の部分を取得し、.avi
をタックします それに戻り、それを新しい名前として割り当てます。
Bash から直接実行するには、次のセミゴルフ ワンライナーを使用します。
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
このスタック オーバーフローの回答の厚意によるエスケープを引用してください。
(Windows 上の Ubuntu の Bash でテスト済み。おそらく PowerShell を使用したもっと短い方法があると思いますが、正規表現を知らない人にもわかりやすいものを示したかったのです。)