如何在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中获取给定目录的目录数? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Bash命令获取目录列表[重复]

被另一个bash脚本调用后获取文件的当前目录[重复]

如何在java中获取执行目录路径[重复]

如何计算目录中文件的总大小[重复]

给定一个包含几千个文件的目录,请输出目录中所有文件名完全相同的列表[重复]

在 bash 中获取目录的内容,不包括 .git 中的所有内容