萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 磁碟清理實戰:用 awk 解析 du 輸出列舉大於指定大小的目錄

磁碟空間告急時,需快速定位大目錄。本文提供一條 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

進階增強版 (支援 K/M/G/T 統一轉換為 MB 比較)


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_dir
  • 清理策略:日誌輪轉、臨時檔清理、舊備份遷移、Docker 鏡像修剪 (docker system prune)
  • 設定監控告警:df -h 定時巡檢 + 閾值觸發

du awk 輸出示例

copyright © 萬盛學電腦網 all rights reserved