2010-11-16 34 views
1

BASH可能會執行「du」命令,其中字節大小以小數表示。bash du以小數點後的字節大小精確到千分之一

例如,說我有以下文件(編號是以字節爲單位):

12345 file1 
2345 file2 
6491 file3 

我想在linux下做一個「du」命令,將輸出改爲以下內容:

12.3 file1 
2.3 file2 
6.5 file3 

注意:「-h」標誌不起作用。

+0

爲什麼'-h'沒有工作? – 2010-11-16 01:41:43

回答

6

您應該能夠使用awk這一點,是這樣的:

du -b * | awk '{printf "%10.1f %s\n", $1/1000, $2}' 

如下面的成績單:

pax> ls -l 
total 3092 
-rwxrwxrwx 1 pax pax  807 2008-09-14 08:26 combo.pl* 
-rwxrwxrwx 1 pax pax  236 2008-09-14 08:26 match.pl* 
-rwxrwxrwx 1 pax pax  754 2008-09-14 08:26 mkdb.pl* 
-rwxrwxrwx 1 pax pax  689 2008-09-14 08:26 nine.pl* 
-rwxrwxrwx 1 pax pax 2089522 2008-05-25 21:06 words.db* 
-rwxrwxrwx 1 pax pax 1044761 2008-05-25 21:06 words.txt* 

pax> du -b * 
807  combo.pl 
236  match.pl 
754  mkdb.pl 
689  nine.pl 
2089522 words.db 
1044761 words.txt 

pax> du -b * | awk '{printf "%10.1f %s\n", $1/1000, $2}' 
     0.8 combo.pl 
     0.2 match.pl 
     0.8 mkdb.pl 
     0.7 nine.pl 
    2089.5 words.db 
    1044.8 words.txt 
0

你可以試試這個:

du --apparent --block-size=100 | sed -r 's/^([0-9]*)([0-9])/\1.\2/' 

這告訴du報告100字節塊的大小,然後我添加一個小數位在使用sed的最後一位數字之前。

+0

這很聰明,但它積極進取。一個948894字節文件我試過這個顯示爲954.4。它對於小文件來說特別糟糕。舍入問題(來源於實際使用塊而不是字節)使用'du - block-size = 100'顯示了一個90字節的文件。 – 2010-11-16 02:46:40

+0

啊,我忘了使用像'-b'這樣的'--apparent'標誌。有了這個修復程序,一個90字節的文件就像預期的那樣顯示爲「.1」 - 我已經更新了。 – porges 2010-11-16 09:38:11

0

不,不是隻有du。您需要使用-b參數來獲得最佳精度,然後再進行數學運算。

1

您可以使用du-k國旗報告千字節?

在Linux上,另一種是不使用du,而是使用find以字節爲單位來報告的大小,然後做數學與perlawk,等等。

du報告磁盤使用情況,因此它包含目錄條目的大小。如果你只是想要大小的實際文件,find會給你。

find . -type f -printf "%s %p\n" | perl -pe 's|^(\d+)(.*)|sprintf("%10.1f", $1/1000).$2|e;' 

如果你只是想總的文件大小:

find . -type f -printf "%s\n" | perl -ne '$s+=$_; END{printf "%-10.1f\n", $s/1000}' 
-1

在GNU du如果-k不會幫助(塊大小= 1024個字節),你可以使用--si這是類似-h(1024),但報告到最接近的千分之一(1000),例如

du -k --si some/folder 
8.2k foo 
4.1k bar 

可選地手動計算每行:

du -b * | awk '{"echo "$1"/1000 | bc" | getline size; print size" "$2}' 

要定製刻度bc,前綴scale=1;,例如

$ bc <<<"scale=2;1234/1000" 
1.23