#!/bin/bash index() { usedext=0 for (( i=0; i < ${#exts[@]}; i++ )); do if [ "${exts[i]}" = "$1" ]; then usedext=1 (( counts[i]++ )) i=${#exts[@]} fi done if [ $usedext = "0" ]; then exts+=("$1") counts+=("1") fi } exts=("*" ".*" "*/" ".*/") counts=(0 0 0 0) shopt -s dotglob path="$PWD"; [ $1 ] && [ -d $1 ] && path="$1" for file in "$path"/*; do file="${file##*/}" # exclude . and .. [ "$file" != "." ] && [ "$file" != ".." ] && \ # directories separately if [ -d "$path/$file" ]; then if [[ "$file" = .* ]]; then index ".*/" else index "*/" fi else if [[ "$file" = *.* ]]; then if [[ "$file" = .* ]]; then index ".*" else index "${file##*.}" fi else index "*" fi fi done for (( i=0; i < ${#exts[@]}; i++ )); do (( ${counts[i]} != 0 )) && echo ${exts[i]}$'\t'${counts[i]} done