2015-10-21 69 views
2

df做了一個偉大的工作概述。但是,如果我想在shell腳本中將變量設置爲磁盤上可用的字節數量呢?我怎樣才能*在bash中獲得磁盤上的可用字節數?

例子:

$ df 
Filesystem   1K-blocks  Used Available Use% Mounted on 
/dev/sda    1111111111 2222222 33333333 10%/
tmpfs     44444444  555 66666666 1% /dev/shm 

但我只是想回到33333333(上/可用的字節),而不是整個df輸出。

+1

? 'df | grep/dev/sda | awk'{print $ 4}'' –

回答

3

可移植性:

df -P /dev/sda1 | awk 'NR==2 {print $4}' 

-P選項確保df將以預期的格式打印輸出,並且特別是不會在設備名稱後面打破行,即使它很長。將設備名稱作爲參數傳遞給df可消除分析中的任何危險,例如在查詢/dev/sda1時獲取/dev/sda10的信息。 df -P只是打印兩行,即標題行(忽略)和打印所需列的一行數據行。

df可能會顯示包含空格的設備名稱,例如,如果卷是按名稱裝載的,並且名稱包含空格,或者對於其遠程裝入點包含空格的NFS卷,則會顯示該裝置名稱。在這種情況下,沒有完全便攜的方式來分析df的輸出。如果您確信df將顯示您傳遞給它確切的設備名稱(這是情況並非總是如此),你可以去除它:

df -P -- "$device" | awk -vn=${#device} 'NR==2 {$0 = substr($0, n+1); print $3}' 
2

只有在Linux的

df --output=avail 
+0

我猜這是linux的唯一吧?我的小蘋果機沒有這個選項。 –

+0

嗯,我認爲你是對的,這個命令在Linux上工作正常,但檢查的Mac df版本它沒有「 - 輸出」選項... –

+0

讓我傷心:( –

6

您可以用awk,

df | awk '$1=="/dev/sda"{print $4}' 
+1

是的,我喜歡你的超過mine::D –

3

您可以使用一個awk

df | grep sda | awk '{print $4}' 
+1

awk也可以做模式匹配,所以你可以擺脫grep –

+0

我可以,但OP可能認爲這更容易理解和記住解決方案。 – ergonaut

相關問題