以下のようなメディアファイルがたくさんあります。
tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
名前を変更したい
tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
名前の変更を使用しようとしましたが、失敗したため、構文が正しくないようです。
これにより、ファイルの名前が変更されます。任意の数の英数字を表すには、\ w *が必要です。
rename 's/\]\w*//' *
参照: http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
シェルでは、簡単に次のことができます。
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
シェルは通常のグロブだけでファイル名のリストを作成でき、${var%pattern}
は変数var
の文字列の末尾から(最短の)一致パターンを削除します。最終的な拡張子は常に.avi
なので、パターンを付けて削除し、再度追加しました。引用符を使用すると、これはFancy Name for a Show.s01e01]Asdf.avi
のようにスペースを含むファイル名でも機能するはずです。
これはあらゆる種類の非現実的です-他の答えははるかに速くて短いです-しかし...
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\')}'
このStack Overflowの回答 の好意でエスケープを引用します。
(Windows上のUbuntuのBashでテストされています。PowerShellでそれを行うにはおそらくはるかに短い方法がありますが、正規表現を知らない人にも理解できるものを示したかったのです。)
Debianには mmv というパッケージがあります。これは他のディストリビューションでも利用できる可能性があり、そうでない場合でもソースからコンパイルするのに十分簡単なはずです。それはあなたがこれを書くことを可能にします:
mmv '*]*.avi' '#1.avi'
詳細については、このコマンドの buntuのマニュアルページ を参照してください。
これにより、パターンが検索され、sedを使用してテキストが置き換えられます。
$sed 's/\(.*]\)[a-zA-z0-9].*\(.avi\)/\1\2/' filename