如何在bash中获取给定目录的目录计数?
我试图使用ls和grep来获取目录计数,并将值存储在一个变量中。不幸的是,我遇到了以下错误:如何在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” 如果是这样,则尝试运行命令-
/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:这确实是一个重要的问题。