BASH可能會執行「du
」命令,其中字節大小以小數表示。bash du以小數點後的字節大小精確到千分之一
例如,說我有以下文件(編號是以字節爲單位):
12345 file1
2345 file2
6491 file3
我想在linux下做一個「du
」命令,將輸出改爲以下內容:
12.3 file1
2.3 file2
6.5 file3
注意:「-h
」標誌不起作用。
BASH可能會執行「du
」命令,其中字節大小以小數表示。bash du以小數點後的字節大小精確到千分之一
例如,說我有以下文件(編號是以字節爲單位):
12345 file1
2345 file2
6491 file3
我想在linux下做一個「du
」命令,將輸出改爲以下內容:
12.3 file1
2.3 file2
6.5 file3
注意:「-h
」標誌不起作用。
您應該能夠使用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
你可以試試這個:
du --apparent --block-size=100 | sed -r 's/^([0-9]*)([0-9])/\1.\2/'
這告訴du
報告100字節塊的大小,然後我添加一個小數位在使用sed
的最後一位數字之前。
這很聰明,但它積極進取。一個948894字節文件我試過這個顯示爲954.4。它對於小文件來說特別糟糕。舍入問題(來源於實際使用塊而不是字節)使用'du - block-size = 100'顯示了一個90字節的文件。 – 2010-11-16 02:46:40
啊,我忘了使用像'-b'這樣的'--apparent'標誌。有了這個修復程序,一個90字節的文件就像預期的那樣顯示爲「.1」 - 我已經更新了。 – porges 2010-11-16 09:38:11
不,不是隻有du
。您需要使用-b
參數來獲得最佳精度,然後再進行數學運算。
您可以使用du
-k
國旗報告千字節?
在Linux上,另一種是不使用du
,而是使用find
以字節爲單位來報告的大小,然後做數學與perl
,awk
,等等。
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}'
在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
爲什麼'-h'沒有工作? – 2010-11-16 01:41:43