如何在bash中获取给定目录的目录数? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在bash中获取给定目录的目录数? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我试图使用ls和grep来获取目录计数,并将值存储在变量中。不幸的是我收到了这个错误:./test.sh: line 3: -l: command not found
这是脚本:
#!/bin/bash
assetid=ls -l /home/user/Desktop/folder | grep -c "^d"
echo $assetid
答案
我想这将处理所有情况:
find . -maxdepth 1 -type d -exec echo \; | wc -l
对于每个目录,我打印一个空的换行符......然后计算换行符。遗憾的是wc
不能处理空终止字符串,但我们可以删除除零之外的所有字符串并计算它们:
find . -maxdepth 1 -type d -print0 | tr -cd '\0' | wc -c
至于你的脚本,你得到错误,因为如果你想将它的输出保存到变量中,你需要附上$( .. )
中的注释。 Bash是空间感知的,我的意思是a=1
是分配,a = 1
运行程序名为a
,参数为=
和1
。 Bash解释这一行:var=1 bash -c 'echo $var'
首先它设置var=1
然后运行程序bash
与参数-c
和'echo $var'
。试试这个:
assetid=$(ls -l /home/user/Desktop/folder | grep -c "^d")
但是不要解析ls
输出。 ls
用于人类可读的漂亮彩色输出,最好在批处理/管道脚本中使用不同的实用程序。
另一答案
使用循环显式计算由模式产生的每个项目。
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[@]
另一答案
有时SO格式化是关闭的,但你真的试图运行命令:assetid=ls -l /home/user/Desktop/folder | grep -c "^d"
?
如果是这样,那就是尝试运行命令-l
,并将环境变量assetid
设置为字符串ls
。你可能打算这样做
assetid=$( ls -l /home/user/Desktop/folder | grep -c "^d" )
以上是关于如何在bash中获取给定目录的目录数? [重复]的主要内容,如果未能解决你的问题,请参考以下文章