GNU/Linux >> Linux の 問題 >  >> Linux

Bashでファイル名の末尾の文字を削除するには?

シェルでは、次のように簡単に実行できます:

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 を使用したもっと短い方法があると思いますが、正規表現を知らない人にもわかりやすいものを示したかったのです。)


Linux
  1. 文字を含むファイル名を変更するにはどうすればよいですか?

  2. Bash変数で特定の文字のみを許可するにはどうすればよいですか?

  3. Linuxでスレッドに名前を付ける方法は?

  1. Bashでループを作成する方法

  2. パス名の .. を bash スクリプトの絶対名に変換する方法は?

  3. Bash変数の文字数をカウントするにはどうすればよいですか

  1. Bashスクリプトをデバッグする方法は?

  2. バッシュを検出する方法>=4.0?

  3. Bash スクリプトのスクリプト ファイル名を知るにはどうすればよいですか?