ファイル数と累積サイズを含むサブディレクトリを含むディレクトリの内容を一覧表示する方法はありますか?
見たいです:
- ディレクトリ数
- サブディレクトリの数
- ファイル数
- 累積サイズ
答え1
私が正しく理解したら、欲しいものを手に入れることができます。
find /path/to/target -type d | while IFS= read -r dir; do
echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)"
echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
echo -e "\tfiles: $(find "$dir" -type f | wc -l )";
done | tac
たとえば、実行すると、/boot
次のような出力が表示されます。
/boot/burg/themes/sora_extended size: 8.0K subdirs: 0 files: 1
/boot/burg/themes/radiance/images size: 196K subdirs: 0 files: 48
/boot/burg/themes/radiance size: 772K subdirs: 1 files: 53
/boot/burg/themes/winter size: 808K subdirs: 0 files: 35
/boot/burg/themes/icons size: 712K subdirs: 0 files: 76
/boot/burg/themes size: 8.9M subdirs: 26 files: 440
/boot/burg/fonts size: 7.1M subdirs: 0 files: 74
/boot/burg size: 20M subdirs: 29 files: 733
/boot/grub/locale size: 652K subdirs: 0 files: 17
/boot/grub size: 4.6M subdirs: 1 files: 224
/boot/extlinux/themes/debian-wheezy/extlinux size: 732K subdirs: 0 files: 11
/boot/extlinux/themes/debian-wheezy size: 1.5M subdirs: 1 files: 22
/boot/extlinux/themes size: 1.5M subdirs: 2 files: 22
/boot/extlinux size: 1.6M subdirs: 3 files: 28
/boot/ size: 122M subdirs: 36 files: 1004
このコマンドに簡単にアクセスするには、それを関数に変換するだけです。シェルの初期化ファイル(~/.bashrc
bashの場合)に次の行を追加します。
dirsize(){
find "$1" -type d | while IFS= read -r dir; do
echo -ne "$dir\tsize: $(du -sh "$dir"| cut -f 1)"
echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l )";
done | tac
}
これで、次のように実行できますdirsize /path/
。
説明する
上記の関数は5つの主要部分で構成されています。
find /path/to/target -type d | while IFS= read -r dir; do ... ; done
:以下のすべてのディレクトリを探し、/path/to/target
名前に変数を設定して各ディレクトリを処理します。名前にスペースが含まれているディレクトリでは、これが中断されないことをdir
確認してください。IFS=
echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)"
:このコマンドはdu
ディレクトリのサイズを取得し、cut
最初のフィールドのみを印刷するコマンドを使用しますdu
。echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
:このfindコマンドはファイルではなくディレクトリだけを探し、$dir
現在のディレクトリを計算しないようにします。type -d
-mindepth
.
echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l)";
:次のファイルを探します(-type f
)。まっすぐ(-maxdepth 1
)の下に$dir
。計算されません$d
。| tac
:ついに合格tac
これは行の印刷順序を逆にします。これは、ターゲットディレクトリの合計サイズが最後の行に表示されることを意味します。必要なものでない場合は削除してください| tac
。