どこかで.zip/tar.gzまたはプロジェクトのソースコードをダウンロードしたとしましょう。結果として得られるのは、任意のファイルの束です。一部はコードを含み、一部は画像を含みます。画像、メディアファイル、テキストファイルの割合を知る方法はありますか?これを行うことができるツールがあれば共有してください。そうでない場合は、これを実行するスクリプトや他のものをどのように作成しますか?
更新 - 受信したコメントに基づいて追加情報を提供します。
たとえば、私が言いたいことは次のとおりです。
┌─[shirish@debian] - [~/games/I-Nex] - [10054]
└─[$] [$] ll -h
total 236K
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 21:25 debian
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 19:16 I-Nex
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 19:16 JSON
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 02:12 dists
-rw-r--r-- 1 shirish shirish 7.8K 2016-11-13 02:12 i2c_smbus.rules
-rw-r--r-- 1 shirish shirish 1.4K 2016-11-13 02:12 i-nex.mk
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 02:12 manpages
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 02:12 pixmaps
-rw-r--r-- 1 shirish shirish 97 2016-11-13 02:12 release.conf
-rw-r--r-- 1 shirish shirish 280 2016-11-13 02:12 requirements.md
-rwxr-xr-x 1 shirish shirish 1.4K 2016-11-13 02:12 changelog.awk
-rwxr-xr-x 1 shirish shirish 2.5K 2016-11-13 02:12 Makefile
-rw-r--r-- 1 shirish shirish 6.6K 2016-11-13 02:12 README.md
-rw-r--r-- 1 shirish shirish 176K 2016-11-13 02:12 Changelog.md
この例では、pixmapsディレクトリにのみ画像/画像が含まれているので、単純ですが、テキストファイルとテキストディレクトリが占めるスペースとpixmapが占めるスペースについてはわかりません。
ベストアンサー1
#!/bin/bash
find "$1" ! -type d |
while read fpath; do
fname="${fpath##*/}"
suffix="${fname##*.}"
if [[ "$suffix" == "$fname" ]]; then
suffix="(none)"
fi
size="$( stat --format '%s' "$fpath" )"
printf '%s\t%d\n' "$suffix" "$size"
done |
awk '{ sz[$1] += $2 }
END { for (s in sz) { printf("%s:\t%d\n", s, sz[s]) } }'
コマンドラインにディレクトリがある場合、上記のスクリプトは1をbash
使用してディレクトリとその下のすべてのファイルのサイズをバイト単位で取得します。 whileループはまた、各ファイルのサフィックスを傍受し、ファイルサイズ(バイト)と共に出力します。stat
最終awk
スクリプト2は情報を要約して印刷する。
たとえば、作業プロジェクトの1つでディレクトリを実行します。
$ bash ./script.sh /home/kk/Work/Development/project/src/
c: 4559172
am: 369
h: 151369
o: 4613432
in: 42216
out: 3282712
(none): 2908962
Po: 18414
txt: 7129
必要に応じて、出力をさらにフィルタリングしてフォーマットすることができます。
フルサイズのパーセンテージを取得したり、file
ファイル名のサフィックスに依存するのではなく、ファイルタイプを取得したり、バイト以外の単位でサイズを出力したりするように変更することは、読者の練習問題のままです。
1ここでの 呼び出しは、GNU coreutilsパッケージでGNUに合わせてカスタマイズされstat
ました。stat
OpenBSDstat
では完全その他。
2GNUまたは。awk
awk
awk
mawk