GeekToolというのはMacのデスクトップをカスタマイズするツールです。 だいぶ前にGeekToolでディスク容量を表示するスクリプトを紹介しましたが、その後macOSの仕様変更などもあり、スクリプトを全体的に見直して記事を書きなおすことにしました。以前の記事とかぶる部分もありますがご容赦ください。
GeekToolでマウントしているディスク容量を表示するには、簡単なスクリプトでは
df -hl
というものがあります。これを実行すると表示は以下のようになります。
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk2s5 1.0Ti 9.9Gi 876Gi 2% 482156 10947937764 0% / /dev/disk2s1 1.0Ti 147Gi 876Gi 15% 1420284 10946999636 0% /System/Volumes/Data /dev/disk2s4 1.0Ti 2.0Gi 876Gi 1% 3 10948419917 0% /private/var/vm /dev/disk3s2 931Gi 721Gi 210Gi 78% 404249 4294563030 0% /Volumes/名称未設定 /dev/disk4s2 1.8Ti 935Gi 927Gi 51% 7582410 4287384869 0% /Volumes/Time Machine
これだけでも使えないことはないのですが、余計な情報が多いので表示を整理してみます。
情報をトータル容量と使用容量と空き容量とディスク名に絞り、ネットワーク経由でマウントしているディスクも表示するスクリプトは以下の通りです。等幅フォントを指定してください。
ディスク容量 その1
df -h | grep 'Filesystem\|/dev/disk\|/Volumes/' | grep -v 'private/var/vm\|firmwaresyncd\|com.apple.TimeMachine.localsnapshots\|auto_home\|\/Volumes\/Recovery\|\/$' | awk '{for(i=2;i<=4;i++){gsub("Ti","TB",$i);gsub("Gi","GB",$i);gsub("Mi","MB",$i)};printf " %5s %5s %5s %8s ",$2,$3,$4,$5;for(i=9;i<=NF;i++)printf $i" ";print ""}'
このスクリプトでは以下のような表示になります。
Size Used Avail Capacity Mounted on 1.0TB 147GB 876GB 15% /System/Volumes/Data 931GB 721GB 210GB 78% /Volumes/名称未設定 1.8TB 935GB 927GB 51% /Volumes/Time Machine
ここで終わりにしても良いのですが、さらに一歩進んでこんな感じの表示にしてみます。
一番上の行に下線をつけて、ドライブ名をFinderでの一般的な表示にして左側に移し、使用量の割合にグラフを追加しています。
スクリプトは以下の通りです。ディスク名をもっと長く(または短く)表示したい場合は、スクリプトの最初の方にあるdisknameln=17
というところの数字を変更してください。ディスク名に日本語を使っている場合は日本語に対応した等幅フォント(Ricty、Osaka-Monoなど)が必要です。上の画像ではRicty Discordを使用しています。
ディスク容量 その2
このスクリプトのGeekletは以下からダウンロードできます。
ちょっと解説
ど素人の書いたスクリプトなので変なところが色々あると思いますが・・・
一番大変だったのはprintfで日本語の桁数を合わせて表示することでした。シェルスクリプトの中での日本語の扱いは、多くの場合で表示は2文字分で中身は3バイトで文字数をカウントすると1文字という非常に面倒くさい状況です。そこをどうやって帳尻を合わせるかを考えるのが面倒でした。
ニーズがありそうな話なのでネットに情報があるかと思ったのですがどういうわけか中途半端な情報しかなく、長さがわからない文字列の桁数を揃えて表示するための方法は自分で考える必要がありました。かなり強引な処理をやっているので本当にこれで良いのかは疑問が残るところもあるのですが、一応思った通りに動作はしているのでひとまずはこれで良しとします。
もっとスマートなやり方をご存知の方がおられたらご一報いただければ嬉しいです・・・