命令 :
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1
正在給我:
41G /Users/user/Big folder
如何提取路徑以在腳本中重複使用它?
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'
會輸出
/Users/user/Big
這是無法使用的,我正在尋找以下結果:
/Users/user/Big\ folder
答案1
在進行自動化處理時,不要因為使用不同單位的數字而使你的生活變得更加複雜。不要傳遞-h
到du
.然後,您可以對輸出使用簡單的數字排序,並且如果其中一個目錄中有超過 1 TB 的數據,您的腳本仍然可以工作。
du -s ~/* | sort -k 1n | tail -n1
即使最大的子目錄包含的內容小於 1 GB,這也總是會列印出一行。如果這不是您想要的,您可以將條件“輸出是否為空”替換為“數字是否小於閾值”。
若要提取目錄名稱,請取得輸出並刪除第一個選項卡之前的部分。
largest_directory=$(du -s ~/* | sort -k 1n | tail -n1)
largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size
largest_directory=${largest_directory#*$(printf '\t')}
答案2
正面:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
如果沒有-h
,du
結果將包含簡單的大小數字,因此我們可以輕鬆地對其進行排序,而無需額外的grep
。
使用sed
在第一行執行刪除然後退出,我們保存一個head
呼叫。
答案3
提取所需路徑的另一種方法是read
在完成這些du
操作後通過命令sort-ed
,然後將其傳遞給while/read
du.. sort.. | while read x d; do echo "$d"; done