回答:
これにより、ファイルの名前が変更されます。任意の数の英数字を示すために\ 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
シェルは、通常のglobだけでファイル名のリストを作成し、${var%pattern}
variableの文字列の末尾から(最短の)一致するパターンを
削除しますvar
。最終的な拡張子は常にですので.avi
、パターンでそれを削除し、追加し直しました。引用符を使用すると、次のようにスペースを含むファイル名でも機能するはずですFancy Name for a Show.s01e01]Asdf.avi
${x/]*([^.])}
べきことのように、ブラケットと任意の数の非ドットを削除します。(文字列の最後にロックされていないため、他のブラケットまたはドットがある場合は失敗します)
${x/]*.avi}
の.avi
ようなものを追加しました。しかし、名前のスペースがどのように壊れるかについても不満(`find . -name '*]*.avi'`)
でした。名前を変更することはできないので、限られた標準のUNIXコマンドメソッドを提供できてうれしいですが、これは私のものを吹き飛ばします。
これはすべての種類の非実用的です-他の答えははるかに速くて短いです-しかし...
PowerShellを使用できます!マイクロソフトは最近それをオープンソース化し、クロスプラットフォームにしました。OSのダウンロードおよびインストール手順については、「Get 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'
あなたは読むことができますUbuntuのmanページを詳細については、このコマンドのために。
これにより、パターンが検索され、sedを使用してテキストが置き換えられます。
$sed 's/\(.*]\)[a-zA-z0-9].*\(.avi\)/\1\2/' filename
krename
素敵です。あらゆる種類の強力なオプションがあり、実際に実行する前に何を実行するかを示します。これを使用して、後でbashで使用できるパターンをテストすることもできます。