计算每个文件夹的平均文件数

时间:2016-03-28 15:24:22

标签: linux bash shell shebang

所以我正在编写一个shell脚本来计算用户选择的文件夹中的平均文件数

我只是不确定,如何解决这个问题。

首先,我们必须设置用户文件夹选择

#!/bin/sh
# Script for folder info
#-------------------------------------------
WANTEDFOLDER=$PWD
cd
cd $1 #Go into the folder (first argument)
$WANTEDFOLDER/folderinfo.sh
# ------------------------------------------
echo "Selected directory: $PWD"

我添加了几个类似时尚的命令,但是为了便于阅读起见,我不会在这里添加它们。

所以我想知道,我怎么可能计算位于指定目录的文件夹内的平均文件数。

为了更好地理解这一点,让我们设置一个

的示例目录
$ mkdir testdir
$ cd testdir
$ mkdir 1
$ mkdir 2
$ mkdir 3
$ cd 1
$ echo "hello" > wow.txt
$ cd ..
$ cd 2
$ echo "World"; > file.c
$ echo "file number 2" > twoinone.tex
$ cd ..
$ cd 3
$ echo "zzz" > z.txt
$ echo "zz2" > z2.txt
$ echo "zz3" ? z3.txt

好吧,所以在此之后为了更好地说明,文件夹看起来像这样

首先,我们先做find . -type f

这应打印以下结果

  

./ 1 / wow.txt
  ./2/file.c
  ./2/twoinone.tex
  ./3/z.txt
  ./3/z2.txt
  ./3/z3.txt

现在我们在目录1中有1个文件,2个中有2个,3个中有3个。 因此,要计算平均值(1 + 2 + 3)/ 3,结果为2。

这也可以写成

的算法

(所有唯一文件的数量)/(所有唯一目录的数量)

有一件事是在脑海中计算这个,另一件在实际的shell脚本中计算。

所以换句话说,我需要以某种方式转换成脚本,它将计算特定文件夹中的文件数量,存储它,将它们全部计算在一起,然后最后除以它的唯一数量目录。

因此,要获得目录数量,我们必须执行find . -type d | wc -l

获取文件数量非常简单。我们只使用find . -type f | wc -l

我不知道的是,如何将这两个值存储在一个变量中然后将它们相互分开

此外,我理想情况下更喜欢以特定行

的方式格式化代码

例如。 echo "Average Number of files: $(find . -type f | wc -l (somehow divide) find . -type d | wc -l)"

知道怎么把这个壮举拉下来吗?

2 个答案:

答案 0 :(得分:3)

也许这就是你要找的东西:

echo $(( $(find . -type f | wc -l) / $(find . -type d | wc -l) ))

答案 1 :(得分:0)

1。)是否真的有必要获得所有目录中平均文件数的浮点估计值?但是你问了这个问题,所以目前至少需要解决这个问题。

#!/bin/bash

NumFiles=0

#Loop over all directories in the current location and count the files in each directory
DirCount=0
for d in */
do
        FilesInDir=$(\ls -A $d|wc -l)
        echo "Number of files in directory $d is $FilesInDir"
        NumFiles=$(($NumFiles+$FilesInDir))
        DirCount=$(($DirCount + 1))
done

echo Final number of directories: $DirCount
echo Total files in directories: $NumFiles

if [ $DirCount -gt 0 ]; then
        AvgFiles=$(echo "$NumFiles/$DirCount" | bc -l)
        echo $AvgFiles
fi