在bash中计算可执行文件的数量

我已经看到了很多有关这个问题的答案,但我不想用find来做这个。 我已经写了这个,但不工作:

 function CountEx() { count=0 for file in `ls $1` do echo "file is $file" if [ -x $file ] then count=`expr $count + 1` fi done echo "The number of executable files in this dir is: $count" } while getopts x:d:c:h opt do case $opt in x)CountEx $OPTARG;; d)CountDir $OPTARG;; c)Comp $OPTARG;; h)help;; *)echo "Please Use The -h Option to see help" break;; esac done 

我正在使用这个脚本,如下所示:

 yaser.sh -x './..../...../.....' 

shell运行它然后输出:当The number of executable files in this dir is: 0有很多可执行文件时,这个目录中The number of executable files in this dir is: 0

如果你的目标是统计目录,有很多选择。

find方式,你说你不想要的:

 CountDir() { if [[ ! -d "$1" ]]; then echo "ERROR: $1 is not a directory." >&2 return 1 fi printf "Total: %d\n" $(find "$1" -depth 1 -type d | wc -l) } 

方式,类似于你的例子:

 CountDir() { if [[ ! -d "$1" ]]; then echo "ERROR: $1 is not a directory." >&2 return 1 fi count=0 for dir in "$1"/*; do if [[ -d "$dir" ]]; then ((count++)) fi done echo "Total: $count" } 

set方式,完全跳过循环。

 CountDir() { if [[ ! -d "$1" ]]; then echo "ERROR: $1 is not a directory." >&2 return 1 fi set -- "$1"/*/ echo "Total: $#" } 

要计算可执行文件的数量(如标题所述)

  count=0 for file in yourdir/*; do if [ -x $file ]; then count=$((count+1)); fi; done; echo "total ${count}" 

要计算文件夹,只需使用-d更改-x测试