我已经看到了很多有关这个问题的答案,但我不想用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
测试