Bash计数目录,子目录和文件

时间:2015-04-10 05:46:50

标签: bash shell for-loop count directory

我已经看过堆栈溢出的所有其他答案,并花了一整天时间。

我要做的第一件事是计算指定目录中的所有目录/子目录,理想情况下应该非常简单。首先,我要求用户输入目录名称。

#Choosing directory
echo "Please type in directory cd: [directory name]"
read dirname
cd $dirname
echo "Entering directory" 

这很好用。接下来,我尝试了两种方法来查找文件夹数量。

我正在测试的目录中共有6个目录/子目录和3个文件。

第一种方法正在使用' find'和' wc'单独输出一个字符串" 7"如果前面有空格,我不想计算我们选择的目录。如果我将它设置为变量,我也不能从该值中减去1,因为它是一个前面有空格的字符串。

direnum=`find . -type d | wc -l`
echo "$direnum"

(结果= 7)(要求结果= 6)

第二种方法正在使用' for循环'随着'找到'和' wc'。此方法工作正常,但在文件很多时速度极慢。

i=0
for d in `find . -type d` 
do
   i=`expr $i + 1`
done

#dont include the directory currently in
i=`expr $i - 1`

#output results
echo "Directories: $i"

(结果= 6)(要求结果= 6)

我也尝试了两种方法,但是它没有输出正确的数字。我在目录中有3个文件,第一个方法输出 5 ,第二个方法输出结果 8 不确定这是如何工作的。

第一种文件计数方法

#Check number of files in directory
filenum=`find . -type f | wc -l`
echo "$filenum"

再次导致字符串" 5"前面有很多空间。

(结果= 5)(要求结果= 3)

第二种文件计数方法

#Check number of files in directory
j=0
for f in `find . -type f` 
do
    j=`expr $j + 1`
done

(结果= 8)(要求结果= 3)

如果有人能让我走上正轨,我将不胜感激,我不期待一个完整的解决方案,理想情况下我想自己解决这个问题,但我可能做错了。

3 个答案:

答案 0 :(得分:0)

使用mindepth

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

答案 1 :(得分:0)

继续我的评论:

declare -i direnum
direnum=$(find . -type d|wc -l)
(( direnum-- ))
echo "$direnum"

顺便说一下,请注意我使用的是$( ... )而不是反向标记,反向标记被视为不良做法而已过时。

答案 2 :(得分:0)

命令“tree”从相对位置计算文件和文件夹

tree /path

将为您提供信息。 您是否需要在其他脚本中使用该信息?