2015-11-29 50 views
-1

我試圖用oneliner計數的所有文件,並從./開始子目錄的大小:Bash - 從ls -la輸出中過濾掉目錄,但保留目錄「。」。

ls -laR | grep -v "\.\." | awk '{total += $5} END {print total}' 

但這種計算子目錄大小的兩倍,因爲ls -laR | grep -v "\.\."輸出是:

.: 
total 32 
drwxr-xr-x 3 root root 4096 Nov 29 22:59 . 
-rw-r--r-- 1 root root 55 Nov 29 02:19 131 
-rw-r--r-- 1 root root 50 Nov 29 01:28 abc 
-rw-r--r-- 1 root root 1000 Nov 29 01:27 access.log 
drwxr-xr-x 2 root root 4096 Nov 29 22:24 asd 
-rwx------ 1 root root 458 Nov 29 02:54 oneliners.sh 
-rwx------ 1 root root 2136 Nov 29 17:56 regexp.sh.skript 

./asd: 
total 32 
drwxr-xr-x 2 root root 4096 Nov 29 22:24 . 
-rw-r--r-- 1 root root 21298 Nov 29 22:26 asd 

所以它計算目錄asd兩次。

drwxr-xr-x 2 root root 4096 Nov 29 22:24 asd 

和第二次在目錄./asd:的房源爲:作爲目錄.:的上市一度

drwxr-xr-x 2 root root 4096 Nov 29 22:24 . 

我想到,會出現這種情況對每個子目錄。有沒有辦法從ls輸出中刪除它們一次? Usint grep -v '^d'刪除所有目錄,所以它們不會被統計。我知道我可以簡單地使用du -sb來做到這一點,但我需要用花式線條來完成。

+1

呵呵? 'du'有什麼問題? –

+0

不要分析ls。的輸出。 – 4ae1e1

+2

_但是我需要用花哨的oneliner_完成它。不是'du -sh' oneliner? – alvits

回答

0
ls -FlaR |grep -v '\s\.\{1,\}/$' |awk '{total += $5} END {print total}' 

包含'。'內的文件夾大小,但不包括'。'的大小。本身。與du相比,答案是完全不同的 - du是關於磁盤上的空間(與塊有關)。 我得到使用awk腳本答案是接近到什麼 - 如果你的OS報告減去目錄大小,你得到一個匹配,這表明MacOS X系統使用類似的方法來

ls -FlaR |grep -v '^d.*/$' |awk '{total += $5} END {print total}' 

計算的大小文件夾的內容。

+0

感謝您的幫助。這是做功課,要做數字空間像'du-sb'一樣,但要做到這一點。 閱讀完所有東西后想出了這個: 'find -ls | tr -s「」| sed -e's/^ [\ t] * //'| cut -d「」-f 7 | awk'{total + = $ 1} END {print total}'' –