[Unix] バラバラの拡張子のファイルの拡張子を統一するワンライナー

renameコマンドを使えば一発なのかもしれませんが... いつもならググって即解決の問題もググれないと自分の知識のみで問題を解決するしかありません。そんなタイミングで今日はバラバラの拡張子のファイルの拡張子を統一したい場合に出くわしました。 以下のようなファイルがあって... ``` 1234.jpg 2345.JPG 3456.jpeg 4567.jpg ``` 全て拡張子をJPEGに統一したいのです。 ## 方法 xargsを使いたくなるのですが、引数を加工することができないので以下のように考えました。 ```bash `gutter:false; find . -type f | grep -iE "jpg|jpeg" | sed -E 's#\./([^.]+)\.([a-zA-Z]+)#mv \1.\2 \1.JPEG#' | sh ``` grepで複数拡張子の物を見つけて、sedで加工してmvコマンドを作成します。 作成したmvコマンドをshで実行してリネームしました。 shをつけずに実行すればどういったコマンドになるか確認できます。 拡張子が違う同名ファイルがあった時に上書きされてしまいますが、ひとまずはしょうがないと言うことで... 上書きしたく無い場合は、mvの-nオプションなどつけて置くと上書きされないので安心です。 ググれない環境では、この方法は思いつかなくて、拡張子の種類ごとに検索してファイル名のみをgrepコマンドで抜き出し、最後にxargsでmvコマンドを組み立てて実行しました。

0 件のコメント :

コメントを投稿