递归计算特定文件BASH

时间:2011-06-07 16:57:55

标签: bash recursion file-type

我的目标是编写一个脚本,以递归方式搜索当前工作目录和子目录,并打印出普通文件数,目录数,块特殊文件数,特殊字符数文件,FIFO的数量和符号链接的数量。我必须使用[[]]进行条件测试。问题是我不太确定如何开始。

我尝试了类似下面的内容来搜索所有普通文件,但我不确定递归在BASH脚本中是如何工作的:

function searchFiles(){
    if [[ -f /* ]]; then
        return 1
    fi
}
searchFiles
echo "Number of ordinary files $?"

但结果是0。有人帮忙吗?

2 个答案:

答案 0 :(得分:40)

为什么不使用find

$ # Files
$ find . -type f | wc -l
327
$ # Directories
$ find . -type d | wc -l
64
$ # Block special
$ find . -type b | wc -l
0
$ # Character special
$ find . -type c | wc -l
0
$ # named pipe
$ find . -type p | wc -l
0
$ # symlink
$ find . -type l | wc -l
0

答案 1 :(得分:3)

让你入门的东西:

#!/bin/bash

directory=0
file=0
total=0

for a in *
do
   if test -d $a; then
      directory=$(($directory+1))
   else
      file=$(($file+1))
   fi

   total=$(($total+1))
   echo $a

done

echo Total directories: $directory
echo Total files: $file
echo Total: $total

这里没有递归,因为你可以诉诸ls -lR或类似的;但是如果你要使用外部程序,你应该再次使用find,这就是它的目的。