Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中获取给定目录的目录计数?_Bash_Count_Directory - Fatal编程技术网

如何在bash中获取给定目录的目录计数?

如何在bash中获取给定目录的目录计数?,bash,count,directory,Bash,Count,Directory,我试图使用ls和grep来获取目录计数,并将值存储在一个变量中。不幸的是,我遇到了以下错误:/test.sh:第3行:-l:未找到命令 以下是脚本: #!/bin/bash assetid=ls -l /home/user/Desktop/folder | grep -c "^d" echo $assetid 有时,SO格式设置是关闭的,但您真的在尝试运行命令:assetid=ls-l/home/user/Desktop/folder | grep-c“^d” 如果是这样,则尝试运行命令-

我试图使用ls和grep来获取目录计数,并将值存储在一个变量中。不幸的是,我遇到了以下错误:
/test.sh:第3行:-l:未找到命令
以下是脚本:

#!/bin/bash

assetid=ls -l /home/user/Desktop/folder | grep -c "^d"

echo $assetid

有时,SO格式设置是关闭的,但您真的在尝试运行命令:
assetid=ls-l/home/user/Desktop/folder | grep-c“^d”

如果是这样,则尝试运行命令
-l
,环境变量
assetid
设置为字符串
ls
。你可能打算这么做

assetid=$( ls -l /home/user/Desktop/folder | grep -c "^d" )

使用循环显式地计算模式产生的每个项

count=0
for f in /home/user/Desktop/folder/*/; do
    count=$((count + 1))
done
如果还需要包含隐藏目录,请使用

count=0
for f in /home/user/Desktop/folder/*/ /home/user/Desktop/folder/.*/; do
    count=$((count + 1))
done
如果您不关心内存使用情况,请填充一个数组并获得结果数组的大小

dirs=( /home/user/Desktop/folder/*/ )
count=${#dirs[@]}

我想这将处理所有情况:

find . -maxdepth 1 -type d -exec echo \; | wc -l
对于每个目录,我打印一个空换行符。。。然后数一数新行。遗憾的是,
wc
对以null结尾的字符串不起作用,但我们可以删除除零之外的所有字符串并对它们进行计数:

find . -maxdepth 1 -type d -print0 | tr -cd '\0' | wc -c
至于脚本,您会遇到错误,因为如果要将其输出保存到变量中,需要将注释括在
$(..)
中。Bash是空间感知的,我的意思是
a=1
是assignment,
a=1
是运行名为
a
的程序,带有参数
=
1
。Bash将这行代码解释为:
var=1bash-c'echo$var'
,它首先设置
var=1
,然后使用参数
-c
'echo$var'
运行程序
Bash
。试试这个:

assetid=$(ls -l /home/user/Desktop/folder | grep -c "^d")

但是不要解析
ls
输出
ls
用于人类可读的彩色输出,最好在批处理/管道脚本中使用不同的实用程序。

我建议:
assetid=$(find.-maxdepth 1-type d | wc-l)
@Cyrus这和解析
ls
一样糟糕;目录名可以包含换行符,因此行数!=文件计数。@chepner:这确实是一个重要的问题。