ファイルやディレクトリをワンライナーでキャピタライズする

More than 1 year has passed since last update.


コマンド


capitalize.sh

ls | awk '{ print $1 " " toupper(substr($1,1,1)) substr($1,2,length($1)) }' | xargs -n 2 mv



コマンドの分解

ただ貼るだけだと復習にならないので、処理を一つづつ分解していきます。


ls

user@localhost: ls

fuga hoge

まず、lsでカレントの一覧を出します。この2つのディレクトリをcapitalizeして

FugaHogeにするのがゴールです。

最初はrubyのcapitalizeメソッドを上手く使うことでrenameできないかと考えたのですが、

awkの練習をしたかったのでshellで突き進みました。


awk節

ls | awk '{ print $1 " " tolower(substr($1,1,1)) substr($1,2,length($1)) }'

ここがポイントかなと思いました。

この時点ではこのような結果になっています。

user@localhost: ls | awk '{ print $1 " " toupper(substr($1,1,1)) substr($1,2,length($1)) }'

fuga Fuga
hoge Hoge

toupper( substr($1,1,1) )Fを作り、substr($1,2,length($1)ugaの部分を作ることで合わせてFugaとしています。

最終的にmvコマンドの引数に渡すためにオリジナルの状態 + (半角スペース) + capitalize後の状態 という結果を作り、次の処理に渡します。


xargs -n 2 mv

xargs のオプションについてはこちらの記事を参考にさせていただきました。

xargs のオプションいろいろ

xargs -n 2とすることで、引数として2つを渡せるようになったため、

mv fuga Fugamv hoge Hogeを組み立てることができます。


最後に

shellのワンライナーを考えるのは楽しいですね。

xargs と awk と sed を工夫して使うといろいろなことができるので

もっと勉強していきます。