linuxで指定したファイルの合計サイズを取得する

linuxで、ディレクトリ内のファイルの合計容量を取得するのではなく、個別に指定したファイル(ワイルドカードで拡張子等を指定したファイルなど)の合計サイズを取得する場合、大まかに分けて2つの方法がある。

1.ls(find)とawkで容量の合計を計算する

ls(+find)とawkで、指定したファイルの合計容量を取得することができる。
lsの実行結果を、awkコマンドで加工する事で合計容量の取得を行えば良い。計算対象をうまく記述出来なければ、ファイルにPATHを記述して$(cat ファイル)で読み出せば良い。

もしCentOS7もしくはUbuntu 14.04以降のOSで、かつ人の読みやすい出力形式にしたいならば、「numfmt」コマンドで加工してあげると良いだろう。

ls -la ファイルPATH等条件 | awk '{ total += $5 }; END { print total }'

[root@test-centos7 ~]# ls -la /work/test*.py
-rw-r--r--. 1 root root 2223 10月 27 07:10 /work/test.py
-rw-r--r--. 1 root root  457 10月 28 20:09 /work/test1.py
-rw-r--r--. 1 root root 3261 10月 28 22:27 /work/test10.py
-rw-r--r--. 1 root root 1567 10月 28 22:26 /work/test11.py
-rwxr-xr-x. 1 root root 4450 11月  3 07:36 /work/test12.py
-rw-r--r--. 1 root root  682 10月 31 11:09 /work/test13.py
-rw-r--r--. 1 root root  505 11月  6 07:02 /work/test14.py
-rw-r--r--. 1 root root  347 11月  5 06:59 /work/test15.py
-rw-r--r--. 1 root root  232 11月  5 07:04 /work/test16.py
-rw-r--r--. 1 root root 1983 11月  6 08:10 /work/test17.py
-rw-r--r--. 1 root root  649 11月  6 15:37 /work/test18.py
-rw-r--r--. 1 root root  904 11月 11 07:15 /work/test19.py
-rw-r--r--. 1 root root 1345 10月 27 07:06 /work/test2.py
-rw-r--r--. 1 root root 1040 11月 12 13:01 /work/test20.py
-rw-r--r--. 1 root root 1028 11月 12 13:03 /work/test21.py
-rw-r--r--. 1 root root   65 11月 12 17:36 /work/test22.py
-rw-r--r--. 1 root root 1254 11月 12 17:49 /work/test23.py
-rw-r--r--. 1 root root 3310 10月 28 20:10 /work/test3.py
-rw-r--r--. 1 root root 7878 10月 28 20:21 /work/test4.py
-rw-r--r--. 1 root root 1299 10月 28 20:22 /work/test5.py
-rw-r--r--. 1 root root 8432 10月 28 20:54 /work/test6.py
-rw-r--r--. 1 root root  313 10月 28 22:20 /work/test7.py
-rw-r--r--. 1 root root 2887 10月 28 22:22 /work/test8.py
-rw-r--r--. 1 root root 4991 10月 28 22:23 /work/test9.py
[root@test-centos7 ~]# ls -la /work/test*.py | awk '{ total += $5 }; END { print total }'
51102
[root@test-centos7 ~]# ls -la /work/test*.py | awk '{ total += $5 }; END { print total }' | numfmt --to=iec
50K

2.du(or 「wc -c」)で取得する

その他、duもしくは「wc -c」で合計容量を取得する方法もある。
こちらは、合計のみを取得したい場合はtailと組み合わせる必要があるが、「-bh」を付与することで人が読みやすい形式に出力することができる。
(「wc -c」の場合は単位がバイトなので、numfmtで読みやすいよう加工する等が必要になる)

du -bhc ファイルPATH等条件 | tail -n 1

[root@test-centos7 ~]# du -bhc /work/test*.py
2.2K    /work/test.py
457     /work/test1.py
3.2K    /work/test10.py
1.6K    /work/test11.py
4.4K    /work/test12.py
682     /work/test13.py
505     /work/test14.py
347     /work/test15.py
232     /work/test16.py
2.0K    /work/test17.py
649     /work/test18.py
904     /work/test19.py
1.4K    /work/test2.py
1.1K    /work/test20.py
1.1K    /work/test21.py
65      /work/test22.py
1.3K    /work/test23.py
3.3K    /work/test3.py
7.7K    /work/test4.py
1.3K    /work/test5.py
8.3K    /work/test6.py
313     /work/test7.py
2.9K    /work/test8.py
4.9K    /work/test9.py
50K     合計
[root@test-centos7 ~]# du -bhc /work/test*.py | tail -n 1
50K     合計

以上、2つの手法について紹介させてもらった。
ファイルをアーカイブ化する前に、元ファイルがどの程度の容量だったのかみるときなどに有効だろう。