2014-01-28 69 views
0

我想写一个班轮找到每个主目录中的文件数量。我试图这样做,因为有一天我遇到了/ home的inode用完的情况。我花了很长时间才找到罪犯,我想缩短这个过程。这是我的,但它不工作。为什么我的一个班轮没有被执行

for i in /home/*; do if [ -d "$i" ]; then cd $i find . -xdev -maxdepth 100 -type f |wc -l; fi done 

当我运行它时,它为每个主目录打印一个0,并且我保留在根目录下。

然而,当我跑得这一部分:

for i in /home/*; do if [ -d "$i" ]; then cd $i; fi done 

我在最后一个主场目录拉闸导致我相信我走过他们。

当我在每个用户的主目录中运行以下命令:

find . -xdev -maxdepth 100 -type f |wc -l 

我得到一个合法的答案。

+0

您是否缺少cd $ i后的&&?也看到其他问题,如http://stackoverflow.com/questions/9839055/searching-and-counting-files-in-directories-and-subdirectories-bash或http://stackoverflow.com/questions/15216370/如何计算每个目录中的文件数 – x29a

+0

在'cd $ i'后缺少';''? –

+0

或者只是删除'cd' altogeather(不是最好的做法是将其放在shell脚本中),然后将路径放到您的find中。另外,你为什么把这个作为一个“班轮”呢? – BroSlow

回答

0

您错过了cd后的终止字符。但更重要的是,如果您不小心使用cd可能会导致不必要的错误,请尝试下面的代码(不需要cd)。

for i in /home/*; do [ -d "$i" ] && echo "$i" && find "$i" -xdev -maxdepth 100 -type f | wc -l; done 
0

由于find可以采取多条路径,你不需要一个循环:

find /home/*/ -xdev -maxdepth 100 -type f | wc -l 

为了避免与含换行符的文件名的任何问题(罕见,是),你可以采取额外的好处GNU扩展find(你使用-maxdepth,所以我想你可以使用-printf以及):

find /home/*/ -xdev -maxdepth 100 -type f -printf "." | wc -c 

既然你不交流使用文件的名称进行计数,将其替换为单字符字符串,然后计算结果字符串的长度。

+0

您的文件不会为单个目录提供文件数只有总文件 – menders65

相关问题