diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-06-09 23:32:36 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-06-10 00:20:10 +1200 |
commit | 6c0c347db28783a3412c72bf9b7ef18b9926e8e1 (patch) | |
tree | 3a2a2fdff077d132900e23745ea0124fd0802269 /bin | |
parent | Remove unneeded semicolons (diff) | |
download | dotfiles-6c0c347db28783a3412c72bf9b7ef18b9926e8e1.tar.gz dotfiles-6c0c347db28783a3412c72bf9b7ef18b9926e8e1.zip |
Make dub(1df) smarter, add a caveat
Diffstat (limited to 'bin')
-rw-r--r-- | bin/dub.sh | 26 |
1 files changed, 11 insertions, 15 deletions
@@ -1,4 +1,5 @@ # List the biggest files in a directory +self=dub # First optional argument is the directory, defaulting to the # current dir; second optional argument is the number of files to @@ -8,21 +9,16 @@ dir=${1:-.} lines=${2:-10} # Enter the target dir or bail cd -- "$dir" || exit -# Add files matching glob, shift them off if unexpanded (first and -# only entry doesn't exist) -set -- * -[ -e "$1" ] || shift - -# Add dot files, shift off the "." and ".." entries (sh(1) -# implementations seem to vary on whether they include these) -set -- .* "$@" -[ -e "$1" ] || shift -[ "$1" = . ] && shift -[ "$1" = .. ] && shift - -# Run du(1) with POSIX compatible flags -k for kilobyte unit and -# -s for total over the arguments -du -ks -- "$@" | +# Some find(1) devilry to deal with newlines as safely as possible. The idea is +# not even to touch them, and warn about their presence; better the results are +# wrong than malformed +nl=$(printf '\n/') +find . ! -name . -prune \( \ + -name '*'"${nl%/}"'*' \ + -exec sh -c ' + printf >&2 '\''%s: warning: skipped newline filename\n'\'' "$1" + ' _ "$self" \; \ + -o -exec du -ksx -- {} + \) | # Sort the first field (the sizes) numerically, in reverse sort -k1,1nr | |