使用shell脚本递归计算目录和文件

时间:2015-01-03 17:05:28

标签: bash shell recursion

我正在尝试编写一个shell脚本,该脚本将递归计算目录中的所有文件和子目录以及所有隐藏的文件和子目录。我的脚本可以对它们进行计数,但它无法检测子目录中的隐藏文件和目录。我怎样才能改变它以便能够做到这一点?我也不能使用find,du或ls -R

#!/bin/bash
cd $1
dir=0
hiddendir=0
hiddenfiles=0
x=0
items=( $(ls -A) )
amount=( $(ls -1A | wc -l) )

counter() {
    if [ -d "$i" ]; then
        let dir+=1
        if [[ "$i" == .* ]]; then
            let hiddendir+=1
            let dir-=1
        fi
        search "$i"
    elif [ -f "$i" ]; then
        let files+=1
        if [[ "$i" == .* ]]; then
            let files-=1
            let hiddenfiles+=1
        fi
    fi
}
search() {
    for i in $1/*; do
        counter "$i"
    done
}
while [ $x -lt $amount ]; do
    i=${items[$x]}
    counter "$i"
    let x+=1
done

2 个答案:

答案 0 :(得分:1)

#!/bin/bash -e

shopt -s globstar dotglob # now ** lists all entries recursively

cd "$1"

dir=0 files=0 hiddendir=0 hiddenfiles=0

counter() {
   if [ -f "$1" ]; then local typ=files
   elif [ -d "$1" ]; then local typ=dir
   else continue
   fi
   [[ "$(basename "$1")" == .* ]] && local hid=hidden || local hid=""
   ((++$hid$typ))
}

for i in **; do
   counter "$i"
done

echo $dir $files $hiddendir $hiddenfiles

答案 1 :(得分:0)

考虑使用:

find . | wc -l