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