min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash ファイル一覧(ls -l)の表示サイズをGB単位で表示する(awk)

 

ファイル名に「NHK」を含むtsファイルの合計サイズをGB単位で表示させたい。

コマンドの変遷

$ ls -l | grep NHK

$ ls -l | grep NHK | awk '{print $5,$9}'

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9}'

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}'

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a"¥n"}'

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a"¥n"}'

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024"¥n"}'

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024" GB¥n"}'

ーーー

実際に流してみる。

NHK」を含むファイルだけリスト表示する。

$ ls -l | grep NHK

f:id:min117:20170916120310p:plain

リストのうち、5列目9列目を表示する。

$ ls -l | grep NHK | awk '{print $5,$9}'

f:id:min117:20170916120353p:plain

リストの5列目(ファイルサイズ)を 変数a に足し込んでいく。

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9}'

(画面には変化なし)

f:id:min117:20170916120353p:plain

足し込んだ 変数a を表示してみる(最終行が変数aの値つまりファイルサイズの合計値)。

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}'

f:id:min117:20170916120933p:plain

最終行の後ろに改行 ¥n を入れる(¥は半角バックスラッシュに読み替え)。

ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a"¥n"}'

f:id:min117:20170916121149p:plain

最終行の前に、区切り文字 ===== を表示する。

ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a"¥n"}'

f:id:min117:20170916121330p:plain

サイズが分かりにくいので、1024で3回割って GB単位で表示する。

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024"¥n"}'

f:id:min117:20170916121652p:plain

最終行の末尾に「GB」という文字列を表示する。

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024" GB¥n"}'

f:id:min117:20170916121803p:plain

これでコマンドはできた。毎回打つのは面倒なので、自作コマンド ma(My Awk)としてエイリアス登録し、一瞬で呼び出せるようにする。

$ vim ~/.bashrc

alias ma='ls -l | grep mp4 | awk '\''{a+=$5;print $5,$9} END{print "-----\n" a; print "=====\n" a/1024/1024/1024,"GB"}'\'''

f:id:min117:20170917072714p:plain

ポイントは、コマンド内のシングルクオート'\'' で記述すること。

※ こうしないと、エイリアスの記法(alias コマンド名='コマンド文字')にあるシングルクオートと混在してしまってうまく動かない。

追記

numfmt という便利なコマンドがあるらしい。

orebibou.com

numfmt をしないとき

ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}'

f:id:min117:20170918084007p:plain

numfmt をしたとき

$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}' | numfmt --to=iec

f:id:min117:20170918084024p:plain

こりゃ便利だ。