所以我知道如何计算目录中的文件数量 - 我会使用for filename in *
循环,然后测试文件名称以符合我的目的,但我无法弄清楚如何循环遍历目录,然后计算其中有多少(子)目录。
有人能指出我正确的方向吗?
答案 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循环中,这个循环将计算每个换行符。