【发布时间】:2015-02-02 21:42:41
【问题描述】:
我正在尝试在单行上输出给定路径中的目录数。我的愿望是输出这个:
X 多个目录
目前,通过我的 bash 脚本,我得到了这个:
很多
目录
这是我的代码:
ARGUMENT=$1
ls -l $ARGUMENT | egrep -c '^drwx'; echo -n "directories"
如何修复我的输出?谢谢
【问题讨论】:
我正在尝试在单行上输出给定路径中的目录数。我的愿望是输出这个:
X 多个目录
目前,通过我的 bash 脚本,我得到了这个:
很多
目录
这是我的代码:
ARGUMENT=$1
ls -l $ARGUMENT | egrep -c '^drwx'; echo -n "directories"
如何修复我的输出?谢谢
【问题讨论】:
我建议
echo "$(ls -l "$ARGUMENT" | egrep -c '^drwx') directories"
这使用 shell 的最终换行符删除功能来替换命令。
【讨论】:
不要通过管道传送到ls 输出和计数目录,因为如果文件/目录名称中使用了特殊字符,您可能会得到错误的结果。
要计算目录使用:
shopt -s nullglob
arr=( "$ARGUMENT"/*/ )
echo "${#arr[@]} directories"
/ 将确保仅匹配 "$ARGUMENT" 路径中的目录。shopt -s nullglob 是为了确保在 glob 模式失败时返回空结果(给定参数中没有目录)。【讨论】:
shopt 在 BASH 中找不到?
ls command。
作为替代解决方案
$ bc <<< "$(find /etc -maxdepth 1 -type d | wc -l)-1"
116
另一个
$ count=0; while read curr_line; do count=$((count+1)); done < <(ls -l ~/etc | grep ^d); echo ${count}
116
文件夹名称中的空格可以正常工作
$ ls -la
total 20
drwxrwxr-x 5 alex alex 4096 Jun 30 18:40 .
drwxr-xr-x 11 alex alex 4096 Jun 30 16:41 ..
drwxrwxr-x 2 alex alex 4096 Jun 30 16:43 asdasd
drwxrwxr-x 2 alex alex 4096 Jun 30 16:43 dfgerte
drwxrwxr-x 2 alex alex 4096 Jun 30 16:43 somefoler with_space
$ count=0; while read curr_line; do count=$((count+1)); done < <(ls -l ./ | grep ^d); echo ${count}
3
【讨论】: