Command-Line
列出一個目錄,包括子目錄,以及文件計數和累積大小
有沒有辦法列出目錄的內容,包括帶有文件數和累積大小的子目錄?
我想看看:
- 目錄數
- 子目錄數
- 文件數
- 累計規模
如果我對你的理解正確,這會給你想要的:
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
要輕鬆訪問此命令,您可以將其轉換為函式。將這些行添加到 shell 的初始化文件(
~/.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
.