2015-11-04 101 views
0

我正在尋找幫助,創建一個bash腳本,將運行幾個類似的命令,總結總數和輸出總屏幕。我想運行以下命令:腳本來計算從命令和輸出到屏幕總計

find /var/log/audit -xdev -type f -printf '%i\n' | sort -u | wc -l 

find /boot -xdev -type f -printf '%i\n' | sort -u | wc -l 

find /home -xdev -type f -printf '%i\n' | sort -u | wc -l 

依此類推。我還有其他幾個人。我基本上做的是統計系統中每個掛載點上的所有文件,然後我需要腳本將每個命令「wc -l」的所有輸出進行總結,然後將總計輸出到屏幕上。任何幫助是極大的讚賞。

+0

根據迄今爲止給出的所有示例,這似乎是[X-Y問題](http://mywiki.wooledge.org/XyProblem)。您似乎想要統計不同的inode,但是您想要添加輸出數字。這是真正的問題嗎? – kojiro

+0

我的理解是,inode還包含目錄,這就是爲什麼我決定使用find並傳遞-type f。我只是在尋找一個文件數量。例如在我的系統上使用df --inodes或du -a blah blah我的數字大約是77k,而這些命令大約是66k。 – user53029

+0

當然。我的觀點是,這個SO問題沒有解決任何問題。它不會解釋這種差異以及unix.stackexchange.com上的一個很好的問題。可能有一個非常好的理由,就是以這種方式實現df。 – kojiro

回答

1

這應該工作:

a=$(find /var/log/audit -xdev -type f -printf '%i\n' | sort -u | wc -l) 

b=$(find /boot -xdev -type f -printf '%i\n' | sort -u | wc -l) 

c=$(find /home -xdev -type f -printf '%i\n' | sort -u | wc -l) 

final=$(($a+$b+$c)) 

echo $final 
+2

請看看:http://www.shellcheck.net/ – Cyrus

1

我會重定向每個命令輸出到文件

your_command >> results.txt 

,總結起來

awk '{ sum += $1 } END { print sum }' results.txt 
+0

抱歉格式不正確 –

1

這將工作不點名的變化與您的腳本echo n

awk '{sum+=$1} END{print "total: "sum}' < <(echo 4; echo 5; echo 6) 

或者如果不需要單獨的罪名,你可以通過一個以上的路徑來尋找

find path1 path2 path3 ... 
1

這可能是dc

{ 
    for mnt in /var/log/audit /boot /home; do 
     find "$mnt" -xdev -type f -printf '%i\n' | sort -u | wc -l 
    done 
    echo "+" 
    echo "+" 
    echo "p" 
} | dc 

的好地方,您需要一個都不能少「 +「比您的掛載點數量多。