コマンドライン上でふとファイルサイズを確認したいときがある
どうやらwc
を使うと表示できるようなのでやってみる
参考記事
wc -c < file.txt
どうやらこう書くとファイルサイズだけがバイト単位で帰ってくる模様
$ echo "View FileSize" > filesize.txt
$ wc -c < filesize.txt
14
オプションが何かを毎回調べる予感がするのでaliasに登録しておく
引数ありのalias
普段からzshを使っているので、zshでの話
Zshでは無名関数というのが使えるっぽいので
それを使ってワンライナーで実装する
alias filesize='(){ wc -c < $1 }'
これでfilesize
でファイルサイズをぱぱっと確認できる
$ filesize filesize.txt
14
dotfilesでGit管理してる方は忘れずPush
ようなのでdu
ではディレクトリ内というちょっと広域すぎる結果が帰ってくる
wc
を使って任意のファイルのファイルサイズを表示してみた
[修正(2018/10/06)]
du
にファイルを渡したらファイルサイズが見れるようです
(@masami256 さん、ありがとうございます!)
$ du -bh hoge.txt
101K hoge.txt
[追記] 見た目を改良してみた
ファイルサイズが見れて無事めでたしなのですが
画像ファイルだったりPDFファイルだったりを確認する時に
ファイルサイズがバイト表記だと桁数が多すぎて見るのがしんどくなります
なので良い感じに関数を書いてみました(初めて自分で関数書いた)
深夜テンションで書き上げたのでココこうするといいよ〜みたいなコメント大歓迎です
bc
をインストール
小数第一位まで表示させたかったのでbc
をインストールします
$ sudo apt install bc
aliasの削除
見た目を整形するにあたり、処理が少々複雑なので
aliasのワンライナーではなくがっつり関数を書きます
なのでさっき追加したaliasを削除
関数を追加
おそらくまるっとコピペで動くはずです
filesize() {
# 初期化
filesize=$(wc -c < $1)
unit="B"
# 単位を変数にしておく
GB=$(( 1000.0 ** 3.0 ))
MB=$(( 1000.0 ** 2.0 ))
KB=1000.0
# なんちゃって三項演算子で単位を定める
[ `echo "$filesize >= $GB" | bc` -eq 1 ] && is_GB=true || is_GB=false
[ `echo "$filesize >= $MB" | bc` -eq 1 ] && is_MB=true || is_MB=false
[ `echo "$filesize >= $KB" | bc` -eq 1 ] && is_KB=true || is_KB=false
# GB
if $is_GB
then
filesize=$(( $filesize / $GB ))
unit="GB"
# MB
elif $is_MB
then
filesize=$(( $filesize / $MB ))
unit="MB"
# KB
elif $is_KB
then
filesize=$(( $filesize / $KB ))
unit="KB"
fi
# 小数点以下第一位まで表示
printf "%.1f%s\n" $filesize $unit
}
流石に1ファイルでTB
はないと思うのでB
〜GB
の範囲で準備しました
なんちゃって三項演算子はこちらを参考にしました
$ filesize filesize.txt
14.0B
$ filesize kbfile.txt
2.2KB
$ filesize music.mp3
3.7MB
$ filesize movie.mp4
3.5GB
我ながらスッキリした表示でとても気に入っています