我正试图编写一个单行来查找每个主目录中的文件数。我试着这样做,因为前几天我在家里遇到了索引节点用完的情况。我花了很长时间才找到罪犯,我想缩短这个过程。这就是我所拥有的,但它不起作用。
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
由于您实际上并没有使用文件名进行计数,请将其替换为单个字符串,然后计算得到的字符串的长度。