ファイル数と累積サイズを含むディレクトリ(サブディレクトリを含む)を一覧表示する

ファイル数と累積サイズを含むディレクトリ(サブディレクトリを含む)を一覧表示する

ファイル数と累積サイズを含むサブディレクトリを含むディレクトリの内容を一覧表示する方法はありますか?

見たいです:

  • ディレクトリ数
  • サブディレクトリの数
  • ファイル数
  • 累積サイズ

答え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

このコマンドに簡単にアクセスするには、それを関数に変換するだけです。シェルの初期化ファイル(~/.bashrcbashの場合)に次の行を追加します。

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つの主要部分で構成されています。

  1. find /path/to/target -type d | while IFS= read -r dir; do ... ; done:以下のすべてのディレクトリを探し、/path/to/target名前に変数を設定して各ディレクトリを処理します。名前にスペースが含まれているディレクトリでは、これが中断されないことをdir確認してください。IFS=

  2. echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)":このコマンドはduディレクトリのサイズを取得し、cut最初のフィールドのみを印刷するコマンドを使用しますdu

  3. echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)":このfindコマンドはファイルではなくディレクトリだけを探し、$dir現在のディレクトリを計算しないようにします。type -d-mindepth.

  4. echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l)";:次のファイルを探します(-type f)。まっすぐ-maxdepth 1)の下に$dir。計算されません$d

  5. | tac:ついに合格tacこれは行の印刷順序を逆にします。これは、ターゲットディレクトリの合計サイズが最後の行に表示されることを意味します。必要なものでない場合は削除してください| tac

関連情報