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: $#"
}
To count the number of executable (like the title says)
count=0
for file in yourdir/*; do
if [ -x $file ]; then
count=$((count+1));
fi;
done;
echo "total ${count}"
To count folders, just change the -x
test with -d