從指令輸出中提取帶有空格的 UNIX 相容檔案路徑

從指令輸出中提取帶有空格的 UNIX 相容檔案路徑

命令 :

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

在進行自動化處理時,不要因為使用不同單位的數字而使你的生活變得更加複雜。不要傳遞-hdu.然後,您可以對輸出使用簡單的數字排序,並且如果其中一個目錄中有超過 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"

如果沒有-hdu結果將包含簡單的大小數字,因此我們可以輕鬆地對其進行排序,而無需額外的grep

使用sed在第一行執行刪除然後退出,我們保存一個head呼叫。

答案3

提取所需路徑的另一種方法是read在完成這些du操作後通過命令sort-ed,然後將其傳遞給while/read

du.. sort.. | while read x d; do echo "$d"; done

相關內容