我已经编写了一个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--
答案 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