我有一個bash腳本,需要知道目錄中所有gzip文件的字節數。現在,我假設它只是一個沒有子目錄的單一目錄。這是非常誘人的做這樣的事情:統計目錄中所有gzip文件的字節數
du -scb /my/dir/*.gz|tail -n 1
不過,我有文件的TON。 *.gz
不會擴展到某種溢出狀態嗎?有沒有更快,更安全的方法來檢查這個數字?
我有一個bash腳本,需要知道目錄中所有gzip文件的字節數。現在,我假設它只是一個沒有子目錄的單一目錄。這是非常誘人的做這樣的事情:統計目錄中所有gzip文件的字節數
du -scb /my/dir/*.gz|tail -n 1
不過,我有文件的TON。 *.gz
不會擴展到某種溢出狀態嗎?有沒有更快,更安全的方法來檢查這個數字?
這個工程,是 「安全」:
(find . -type f -print0 |
xargs -0 stat -c '%s' |
tr '\n' '+'; echo 0) |
bc
工作原理:
find
,找到 '廣州' 的文件。用無分隔符打印它們,所以我們可以處理奇怪的文件名。xargs
將把文件名組拆分成可管理的塊。將這些文件名分配給stat -c '%s'
以獲取字節大小(謝謝@Fritschy)。tr
將換行符轉換爲+
。回聲在最後加上一個0加上一個換行符。這是因爲我們不會得到一個懸掛加號,並且bc
需要在輸入結尾處換行。不錯的,檢查'統計(1)',它可以根據給定的格式統計文件和打印信息。 – 2010-12-14 23:54:20
@Fritschy:謝謝,我不知道'stat(1)'。納入答案。 – 2010-12-15 00:05:02
echo $(($(find . -type f -name '*.gz' -printf '%s+') 0))
如果您需要巨大值,改變'%s+'
到'%s+0'
,改變$((... 0))
到... | bc
編輯:對於更大的價值,您可能需要使用%k
,而不是%s
,給你千字節。由於整數可能溢出。
因爲我們只在bash中使用內置函數,所以我不確定可執行文件的參數長度是否有問題。
你看起來很好。任何體面的實現都將支持64位文件(我的意思是大於2GB),因此也支持64位總計。 – 2010-12-14 23:47:10
@Chris我認爲他擔心超出命令行長度限制。在大多數Linux系統中,它非常龐大(如果我沒記錯的話,它是128kB),但在一些* nixes中它非常小(我認爲在Solaris上它大概是255字節)。 – 2010-12-14 23:54:28
命令行長度限制是我關心的問題。有沒有辦法從bash中設置和獲取這個值? – User1 2010-12-15 20:12:42