为什么我的一个班轮的一部分没有被执行

时间:2014-01-28 09:54:26

标签: bash find

我正在尝试编写一个内容来查找每个主目录中的文件数。我正试图这样做,因为有一天我遇到了/ home上的inode用完的情况。我花了很长时间才找到罪犯,我想缩短这个过程。这就是我所拥有的,但它不起作用。

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

当我运行它时,它为每个主目录打印一个0,我仍然在root主目录中。

然而,当我只运行这部分时:

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

我在最后一个主页目录中结束,让我相信我已经遍历了所有目录。

当我在每个用户主目录中运行它时:

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

我得到一个合理的答案。

2 个答案:

答案 0 :(得分:0)

您在cd之后错过了终止字符。但更重要的是,如果您不小心,使用cd可能会导致意外错误,请尝试以下方法(cd不需要)。

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

答案 1 :(得分:0)

由于find可以采用多个路径,因此您不需要循环:

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

为避免包含换行符的文件名出现任何问题(罕见,是),您可以利用find的额外GNU扩展程序(您正在使用-maxdepth,因此我假设您可以使用{ {1}}以及:

-printf

由于您实际上并未使用文件名进行计数,请将其替换为单字符字符串,然后计算结果字符串的长度。