所以我知道如何计算目录中的文件数 - 我会使用for filename in *
循环然后测试文件名以符合我的目的,但是我无法弄清楚如何遍历目录然后计算如何许多(子)目录都在其中。
谁能指出我正确的方向?
您可以使用-d
.
您可以使用查找:find . -mindepth 1 -maxdepth 1 -type d
((n=0))
for fn in *
do
[[ -d "${fn}" ]] && ((n=1+${n}))
done
保留一个计数器,只为目录增加它......
你想做什么?看一下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)
这是计算目录或使用目录名称做事的方法。
#!/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
and then count the number of lines. or you could get rid of the cat and just put the above in a for loop that would count up for every newline character.