如何在 BASH 中取得檔案大小(可讀大小不以位元組為單位)

如何在 BASH 中取得檔案大小(可讀大小不以位元組為單位)

這是我的 shell 檔案中的內容:

FILENAME=/var/lib/backups/html-backup/backup-15-04-2016.tar.gz;
FILESIZE= $(ls -lah $FILENAME | awk '{ $FILESIZEINGB = $5}')
echo "Size is $FILESIZEINGB ."

您能告訴我為什麼我看不到可讀形式的檔案大小嗎?

似乎 $FILESIZEINGB 未設置,我在輸出中看不到結果echo

答案1

您無法從子進程設定 shell 變數 - 因此設定FILESIZEINGB無論如何都不起作用(而且它不起作用,因為這意味著awk語法中的其他內容)。

只需使用du -h

FILESIZEINGB=$(du -h "$FILENAME" | awk '{print $1}')

也:

  • 後面不應該有空格=

答案2

或者,如果您不想使用du

FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"

答案3

我發現有人做了一個 AWK one-liner,它有一個錯誤,但我修復了它。我還在 TB 後面添加了 PB。

FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')

考慮到stat並非在每個系統上,我會使用 AWK 解決方案。例子; Raspberry Pi 沒有,stat但它有awk

相關內容