我有以下問題。在變數中DIR有未知數量的檔案和檔案夾。我想按以下順序獲取最大的名稱和大小(以位元組為單位):名稱大小。例如:file.txt 124。
我試過:
cd $DIR
du -a * | sort | head -1
但它不顯示以位元組為單位的大小,它是大小名稱格式。請問我該如何改進?
uj5u.com熱心網友回復:
這應該可以解決問題:
ls -larS | awk -F' {1,}' 'END{print $NF," ",$5}'
LS long串列按大小反向排序,然后awk列印最后一個欄位$NF,第5個欄位,使用單個空格或多個單個空格作為最后一行的欄位分隔符,為最大大小(由于反向排序上面的順序)。
編輯:
有人提到檔案名中的空格可能會導致問題,我的第一個建議是不要在檔案名中使用空格,這是完全錯誤的,但如果您必須:
ls -larS | awk -F' {1,}' 'END{for (i=9; i<=NF; i ) printf $i" "; print " ",$5}'
將處理空間,或兩個,或三個,或多少
uj5u.com熱心網友回復:
下面的管道呢?我正在使用 GNU findutils 和 GNU coreutils。如果您在 Mac 上作業,則可能需要安裝它們。
find -maxdepth 1 -type f -printf '%s %f\0' \
| sort -z -k1,1nr \
| head -zn1 \
| cut -zd' ' -f2-
解釋:
find -maxdepth 1 -type f -printf '%s %f\0'
在當前檔案夾中查找檔案并將它們連同檔案大小(以位元組為單位)一起列印,以零終止。零終止,因為檔案名在 UNIX 中可能包含換行符。
sort -z -k1,1nr
按檔案大小(以位元組為單位),第 1 列,以相反的順序(最大的在前)對串列進行排序。-z 讀取輸入零終止。
head -zn1
列印前一個排序后最大的第一個專案。-z 讀取輸入零終止
cut -zd' ' -f2-
切斷檔案大小,只列印檔案名。-z 讀取輸入零終止。
uj5u.com熱心網友回復:
應該產生所要求的確切輸出的變體:
find -maxdepth 1 -type f -printf "%f %s\0" \
| sort -znr -k2 \
| head -zn1 \
| tr "\0" "\n"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351567.html
標籤:猛击
下一篇:Bash掃描器優化
