1

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

谁能指出我正确的方向?

4

4 回答 4

2

您可以使用-d.

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

于 2012-08-10T20:34:10.077 回答
1
((n=0))
for fn in *
do
   [[ -d "${fn}" ]] && ((n=1+${n}))
done

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

于 2012-08-10T20:50:24.603 回答
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)
于 2012-08-10T21:03:06.513 回答
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

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.

于 2012-08-10T21:11:24.913 回答