roz*_*acz 19
这个技巧怎么样?
find . -maxdepth 1 -exec echo \; | wc -l
Run Code Online (Sandbox Code Playgroud)
作为便携式的find
和wc
。
enz*_*tib 12
使用 bash,没有外部实用程序,也没有循环:
shopt -s dotglob
files=(*)
echo ${#files[@]}
Run Code Online (Sandbox Code Playgroud)
在 ksh 中,替换shopt -s dotglob
为FIGNORE=.?(.)
. 在 zsh 中,将其替换为setopt glob_dots
,或者删除shopt
调用并使用files=(*(D))
. (或者,如果您不想包含点文件,只需删除该行。)可移植,如果您不关心点文件:
set -- *
echo $#
Run Code Online (Sandbox Code Playgroud)
如果您确实想包含点文件:
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
Run Code Online (Sandbox Code Playgroud)
find . ! -name . -prune -print | grep -c /
Run Code Online (Sandbox Code Playgroud)
对 80 后系统应该相当便携。
这会计算当前目录中除.
和..
中的所有目录条目。
还要计算子目录中的文件:
find .//. ! -name . | grep -c //
Run Code Online (Sandbox Code Playgroud)
(那个甚至应该可以移植到 Unix V6(1975),因为它不需要-prune
)
尝试:
ls -b1A | wc -l
Run Code Online (Sandbox Code Playgroud)
在-b
将非打印字符,-A
将显示除所有文件.
和..
每行(在管道上的默认,但好是明确的)一个。
只要我们包括更高级的脚本语言,这里是 Python 中的单行代码:
python -c 'import os; print len(os.listdir(os.sep))'
Run Code Online (Sandbox Code Playgroud)
或者使用完整的“查找”:
python -c 'import os; print len([j for i in os.walk(os.sep) for j in i[1]+i[2]])'
Run Code Online (Sandbox Code Playgroud)