Shell

計算目錄中文件數的最佳方法是什麼?

  • August 15, 2017

如果解析 的輸出ls很危險,因為它可能會破壞一些時髦的字元(空格、、\n…),那麼了解目錄中文件數量的最佳方法是什麼?

我通常依靠find來避免這種解析,但同樣,find mydir | wc -l也會因為同樣的原因而中斷。

我現在正在研究 Solaris,但我正在尋找一個可以在不同的 unices 和不同的 shell 中移植的答案。

這個技巧怎麼樣?

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

find與和一樣便攜wc

使用 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

引用自:https://unix.stackexchange.com/questions/27493