aboutsummaryrefslogblamecommitdiff
path: root/bin/cf
blob: c844b05411cc6799f035a13d37928bb8645acd2e (plain) (tree)
1
2
3
4
5
6
7

                                             
 

                                                                               
                         
 










                                                                     
                                                                  
                             
                                                     


                
 

                     
                                                                      

             
 
                                     
                                     
    


                                                           
#!/bin/sh
# Count entries in a given set of directories

# Iterate over remaining non-option arguments (directories); default to current
# directory if none given
for dir in "${@:-.}" ; do

    # Strip a trailing slash
    dir=${dir%/}

    # If the path is not absolute or already pre-dotted, tack a ./ to
    # the front so that find(1) doesn't choke; otherwise juse use it
    # as-is
    case $dir in
        /*|./*) fdir=$dir ;;
        *) fdir=./$dir ;;
    esac

    # Warn if a non-directory was given, flag errors, but continue
    if ! [ -d "$dir" ] ; then
        printf >&2 'cf: %s: not a directory\n' "$dir"
        ex=1
        continue
    fi

    # Count the files
    count=$(
        find "$fdir" -path "$fdir"'/*' -prune -exec printf %.sx {} + |
        wc -c
    )

    # Print the count and the dirname
    printf '%u\t%s\n' "$count" "$dir"
done

# Exit non-zero if a non-directory was given as an argument
exit "${ex:-0}"