2015-11-04 96 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 

的好地方,您需要一个都不能少“ +“比您的挂载点数量多。