为什么我的一句话的一部分没有被执行



我正试图编写一个单行来查找每个主目录中的文件数。我试着这样做,因为前几天我在家里遇到了索引节点用完的情况。我花了很长时间才找到罪犯,我想缩短这个过程。这就是我所拥有的,但它不起作用。

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

当我运行它时,它会为每个主目录打印一个0,而我则保留在roots主目录中。

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

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

我最终进入了最后一个主目录,这让我相信我已经遍历了所有目录。

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

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

我得到了一个合法的答案。

cd之后缺少一个终止字符。但更重要的是,如果您不小心,使用cd可能会导致不必要的错误,请尝试以下操作(不需要cd)。

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

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

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

为了避免包含换行符的文件名出现任何问题(罕见,是的),您可以利用find的额外GNU扩展(您使用的是-maxdepth,所以我认为您也可以使用-printf):

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

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

相关内容

  • 没有找到相关文章

最新更新