Shell
計算目錄中文件數的最佳方法是什麼?
如果解析 的輸出
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 dotglob
為FIGNORE=.?(.)
. 在 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