aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-06-09 23:32:36 +1200
committerTom Ryder <tom@sanctum.geek.nz>2017-06-10 00:20:10 +1200
commit6c0c347db28783a3412c72bf9b7ef18b9926e8e1 (patch)
tree3a2a2fdff077d132900e23745ea0124fd0802269 /bin
parentaac97c272e442922e30973d42c7f45fa75873241 (diff)
downloaddotfiles-6c0c347db28783a3412c72bf9b7ef18b9926e8e1.tar.gz
dotfiles-6c0c347db28783a3412c72bf9b7ef18b9926e8e1.zip
Make dub(1df) smarter, add a caveat
Diffstat (limited to 'bin')
-rw-r--r--bin/dub.sh26
1 files changed, 11 insertions, 15 deletions
diff --git a/bin/dub.sh b/bin/dub.sh
index f42c5ac9..41ef88d3 100644
--- a/bin/dub.sh
+++ b/bin/dub.sh
@@ -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 |