首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的输出与‘-d文件名’和‘d’?

为什么我的输出与‘-d文件名’和‘d’?
EN

Stack Overflow用户
提问于 2016-03-27 15:29:23
回答 2查看 38关注 0票数 0

我编写了一个shell脚本来判断有多少目录,但是当我使用regex获取drwxr--r---d filename时,我得到了不同的输出,这就是为什么?

代码语言:javascript
复制
echo -n "the amount of dir:"
count=0
for i in $(ls -1 $1)
do
    if [ -d $i ]
    then
        ((count++))
    fi
done
echo "$count"

echo -n "the amount of dir:"
ls -l $1|awk 'BEGIN{count=0;}{if(index($0,"d")==1){count++;}}END{print count;}'

以及产出:

代码语言:javascript
复制
the amount of dir:18
the amount of dir:19

当局的职权范围如下:

代码语言:javascript
复制
drwxr-xr-x   
drwxr-xr-x     
drwxr-xr-x  
drwxr-xr-x   
drwxr-xr-x   
drwxr-xr-x  
drwxr-xr-x   
-rw-r--r--   
-rw-r--r--   
drwxr-xr-x   
drwxr-xr-x
drwxr-xr-x 
drwxr-xr-x  
drwxr-xr-x   
-rw-r--r--  
drwxr-xr-x   
drwxr-xr-x
drwxr-xr-x  
drwxr-xr-x  
drwxr-xr-x   
drwxr-xr-x   
drwxr-xr-x   
-rw-r--r-- 
-rw-r--r--  
-rw-r--r--   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-27 16:02:20

使用find而不是ls枚举目录

相反,使用实用程序和命令替换。例如,您可以使用以下函数打印/tmp中的目录数,而不必递归到其子目录中:

代码语言:javascript
复制
count_directories () {
    count=$(find -L "$1" -type d -maxdepth 1 | wc -l | tr -d ' ')
    echo "Number of directories in $1: $count"
}

样本输出

代码语言:javascript
复制
$ count_directories "/tmp"
Number of directories in /tmp: 13
票数 0
EN

Stack Overflow用户

发布于 2016-03-27 15:42:26

你为什么不试试这个呢?

如果不希望在计数(./.example/)中包含隐藏目录:

count=$(find ${1}/* -maxdepth 0 -type d | wc -l)

如果希望在计数中包含隐藏目录:

count=$(find ${1} -mindepth 1 -maxdepth 1 -type d | wc -l)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36249109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档