为什么我用`-d filename`和`d ---------`有不同的输出?

时间:2016-03-27 15:29:23

标签: linux shell

我已经编写了一个shell脚本来判断目录的数量,但是当我使用正则表达式来抓取drwxr--r---d filename时,我得到了不同的输出,那就是' s为什么呢?

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;}'

和输出:

the amount of dir:18
the amount of dir:19

权威就在下面,:

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

3 个答案:

答案 0 :(得分:0)

检查您是否有指向目录中文件夹的链接 然后第二个命令会忽略这个我猜。

尝试制作一个新文件夹 添加2个文件夹并尝试使用您的脚本

然后创建一个新文件夹 将1个文件夹和1个链接(ln -s)添加到此文件夹之外的文件夹并再次尝试

你应该得到不同的结果

答案 1 :(得分:0)

为什么不试试呢?

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

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

如果您想要在计数中包含隐藏目录:

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

答案 2 :(得分:0)

使用find代替ls枚举目录

Don't parse the output of ls.而是使用find实用程序和command substitution。例如,您可以使用以下函数来打印/tmp中的目录数,而不会递归到其子目录中:

count_directories () {
    count=$(find -L "$1" -type d -maxdepth 1 | wc -l | tr -d ' ')
    echo "Number of directories in $1: $count"
}

样本输出

$ count_directories "/tmp"
Number of directories in /tmp: 13