计算目录中文件数量的最佳方法是什么?

计算目录中文件数量的最佳方法是什么?

如果解析 的输出ls很危险,因为它可能会因某些奇怪的字符(空格、...)而中断\n,那么了解目录中文件数量的最佳方法是什么?

我通常依靠find避免这种解析,但同样,find mydir | wc -l也会因为同样的原因而中断。

我现在正在 Solaris 上工作,但我正在寻找一个尽可能在不同的 unice 和不同的 shell 之间移植的答案。

答案1

这个技巧怎么样?

find . -maxdepth 1 -exec echo \; | wc -l

find与和一样便携wc

答案2

在 bash 中,没有外部实用程序,也没有循环:

shopt -s dotglob
files=(*)
echo "${#files[@]}"

在 ksh 中,替换shopt -s dotglobFIGNORE=.?(.).
在 zsh 中,将其替换为setopt glob_dots,或删除shopt调用并使用files=(*(D))。 (或者如果您不想包含点文件,则只需删除该行即可。)

可移植的是,如果您不关心点文件:

set -- *
echo "$#"

如果您确实想包含点文件:

set -- *
if [ -e "$1" ]; then c=$#; else c=0; fi
set .[!.]*
if [ -e "$1" ]; then c=$((c+$#)); fi
set ..?*
if [ -e "$1" ]; then c=$((c+$#)); fi
echo "$c"

答案3

find . ! -name . -prune -print | grep -c /

对于 80 后系统来说应该具有相当的可移植性。

这会计算当前目录中除.和 之外的所有目录条目。..

还要计算子目录中的文件数量:

find .//. ! -name . | grep -c //

(这个甚至应该可以移植到 Unix V6 (1975),因为它不需要-prune

答案4

我一直使用且从未遇到过问题的最简单的版本是: ls -b1 | wc -l

相关内容