计算目录的内容

时间:2012-08-10 20:27:38

标签: bash shell unix

所以我知道如何计算目录中的文件数量 - 我会使用for filename in *循环,然后测试文件名称以符合我的目的,但我无法弄清楚如何循环遍历目录,然后计算其中有多少(子)目录。

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:2)

您可以使用-d测试其目录。

您可以使用find:find . -mindepth 1 -maxdepth 1 -type d

答案 1 :(得分:1)

((n=0))
for fn in *
do
   [[ -d "${fn}" ]] && ((n=1+${n}))
done

保留一个计数器,只为目录增加...

答案 2 :(得分:1)

你想做什么?看一下wc命令。具体来说,wc -l计算输出中的行数。您可以使用生成输出的整个命令数组,然后将其传递给wc -l。注意向文件添加页眉和页脚的命令(如ls -l)。

以下是一些例子:

这会计算所有不以.开头的文件和目录:

$ ls | wc -l

这与您在问题中的for循环相同。

这会计算所有文件和目录,包括那些隐藏的文件和目录。请注意ls -A而不是ls -a。第一个不会将...列为文件,而第二个将列为:

$ ls -A | wc -l

这将计算整个目录树中的所有文件和目录

$ find . | wc -l

这只会计算整个目录树中的目录

$ find . -type d| wc -l

这将统计整个目录树中的所有文件

$ find . -type f | wc -l

ls - 这将限制您使用当前目录中的目录数

$ find . -mindepth 1 -maxdepth 1 -type d | wc -l

并且,您可以使用它将其分配给变量:

$ num_of_files=$(find . -type f | wc -l)

答案 3 :(得分:0)

这里是如何计算目录或使用目录名称进行操作。

#!/bin/bash

old_IFS=$IFS
IFS=$'\n' 
array=($(ls -F /foo/bar/ | grep '/$')) # this creates an array named "array" that holds
IFS=$old_IFS                           # all the directory names located in /foo/bar/

echo ${#array[@]} # this will give you the number of directories in /foo/bar/

for ((i=0; i<${#array[@]}; i++))
do
echo ${array[$i]} # this will output a list of all the directories
done

或者你可以:

ls -F /foo/bar/ | grep '/$' | cat > directorynames.txt

然后计算行数。或者你可以摆脱猫,只需将上面的内容放在一个for循环中,这个循环将计算每个换行符。