ファイル名を小文字の拡張子に変更するには、「名前の変更」を使用します。

ファイル名を小文字の拡張子に変更するには、「名前の変更」を使用します。

現在、大規模ファイルグループの名前を変更しようとしていますが、次のようにやや不器用な方法を使用しています。

rename 's:(.*)\.MOV:$1.mov:g' *.MOV
rename 's:(.*)\.JPG:$1.jpg:g' *.JPG

私が本当に望むのは、これらのコマンドをすべて組み合わせることができることです。'y'sed演算子。明らかに、この演算子を使用すると、項目を小文字に変換できます。問題は、拡張子を変換するだけでよいということです。このコマンドを使用してこれを行う方法はありますか?次の式のキャプチャグループを小文字に変換する必要があります^.+\.(.+)$。これを行う方法はありますか?私はこれらの変更に少し慣れています。

答え1

rename構文的には、Debian、Ubuntu、およびその派生バージョンのPerlベースのバージョンです。使用できませんtrオペレーター文字列全体に作用するからです。しかし、あなたはできます。ゲームの拡大、小文字で入力してください。そして\L

rename 's/\.[^.]*$/\L$&/' *.JPG *.MOV

ここでは不要ですが、正規表現が小文字で表示したい部分よりも一致する場合は、一致する部分を入れることができます。グループ:

rename 's/\.([^.]*)$/.\L$1/' *.JPG *.MOV

拡張子に関係なくすべてのファイルで機能するには、次のよう*.JPG *.MOVに置き換えます。*.*bash ≥4.3(およびbash 4.0-4.2ではディレクトリのシンボリックリンクも通過します)からサブディレクトリのファイルなどを簡単に再帰的に操作できます。

rename 's/\.[^.]*$/\L$&/' **/*.*

~のためzshファン:rそして:e 修飾子ファイルの残りの部分から拡張子を分離します。

autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}'      # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}'              # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}'           # all extensions, recursive directory traversal

関連情報