磁碟空間告急時,需快速定位大目錄。本文提供一條 du + awk + sort 管道命令,支援 M/G 單位自動識別、閾值過濾、人類可讀輸出,並深度解析 awk 腳本邏輯。
/home/pms 工作目錄佔用過大,需列舉所有 超過 200MB 的子目錄 及其佔用空間,按大小倒序輸出。
du -h --max-depth=10 /home/pms/* | \
awk '{
if ($1 ~ /M$/) { split($1, arr, "M") }
if ($1 ~ /G$/ || ($1 ~ /M$/ && arr[1] > 200)) {
printf "%-10s %s\n", $1, $2
}
}' | sort -hr
| 組件 | 作用 |
|---|---|
du -h --max-depth=10 /home/pms/* | 人類可讀格式 (-h),遞歸 10 層,列出每個子項大小 |
awk '{...}' | 模式匹配與過濾邏輯 |
if ($1 ~ /M$/) | 第一欄以 M 結尾 (MB 級) |
split($1, arr, "M") | 按 M 分割,arr[1] 為數值部分 |
if ($1 ~ /G$/ || (arr[1] > 200)) | G 級直接通過;M 級需 > 200 |
printf "%-10s %s\n", $1, $2 | 左對齊 10 字符寬度輸出大小與路徑 |
sort -hr | 人類可讀數值倒序排序 (-h 支援 K/M/G,-r 逆序) |
# du 原始輸出片段
0 /home/pms/addressCountMap
12K /home/pms/bigDataEngine/conf
1.7M /home/pms/bigDataEngine/analysis/warning
33M /home/pms/bigDataEngine/analysis/log
2.1G /home/pms/bigDataEngine/data
500M /home/pms/backup
# awk 過濾後輸出
2.1G /home/pms/bigDataEngine/data
500M /home/pms/backup
du -h --max-depth=10 /home/pms/* | awk '
function to_mb(str) {
if (str ~ /K$/) return substr(str, 1, length(str)-1) / 1024
if (str ~ /M$/) return substr(str, 1, length(str)-1) + 0
if (str ~ /G$/) return substr(str, 1, length(str)-1) * 1024
if (str ~ /T$/) return substr(str, 1, length(str)-1) * 1024 * 1024
return 0
}
to_mb($1) > 200 { printf "%-10s %s\n", $1, $2 }
' | sort -hr
du -h --max-depth=1 /path/to/large_dirdocker system prune)df -h 定時巡檢 + 閾值觸發