I have seen a lot of answers about this subject but I don\'t want to do this using
find
. I have written this but something not working:
function Cou
If your goal is to count directories, there are so many options.
The find
way, which you said you don't want:
CountDir() {
if [[ ! -d "$1" ]]; then
echo "ERROR: $1 is not a directory." >&2
return 1
fi
printf "Total: %d\n" $(find "$1" -depth 1 -type d | wc -l)
}
The for
way, similar to your example:
CountDir() {
if [[ ! -d "$1" ]]; then
echo "ERROR: $1 is not a directory." >&2
return 1
fi
count=0
for dir in "$1"/*; do
if [[ -d "$dir" ]]; then
((count++))
fi
done
echo "Total: $count"
}
The set
way, which skips the loop entirely.
CountDir() {
if [[ ! -d "$1" ]]; then
echo "ERROR: $1 is not a directory." >&2
return 1
fi
set -- "$1"/*/
echo "Total: $#"
}