forked from kiss-community/kiss
a973491b0e
if a package contains a file with a quote in it's name, xargs complains about an unmatched quote and fails, and the pipeline is aborted. this patch escapes all non-alphanumeric characters so that xargs can handle such filenames.
45 lines
1.3 KiB
Bash
Executable File
45 lines
1.3 KiB
Bash
Executable File
#!/bin/sh -ef
|
|
# Show the size on disk for a package
|
|
|
|
get_size() {
|
|
# Naive function to convert bytes to human readable
|
|
# sizes (MB, KB, etc). This is probably wrong in places
|
|
# though we can fix this over time. It's a start.
|
|
case ${#1} in
|
|
[0-3]) hum=$(($1))KB ;;
|
|
[4-6]) hum=$(($1 / 1024))MB ;;
|
|
[7-9]) hum=$(($1 / 1024 / 1024))GB ;;
|
|
*) hum=$(($1)) ;;
|
|
esac
|
|
|
|
printf '%s\t%s\n' "$hum" "$2"
|
|
}
|
|
|
|
# Use the current directory as the package name if no package is given.
|
|
[ "$1" ] || set -- "${PWD##*/}"
|
|
|
|
# Ignore shellcheck as we want the warning's behavior.
|
|
# shellcheck disable=2015
|
|
kiss list "${1:-null}" >/dev/null || {
|
|
printf 'usage: kiss-size [pkg]\n'
|
|
exit 1
|
|
}
|
|
|
|
# Filter directories from manifest and leave only files.
|
|
# Directories in the manifest end in a trailing '/'.
|
|
# Send the file list to 'xargs' to run through 'du',
|
|
# this prevents du from exiting due to too many arguments
|
|
sed -e "s|^|$KISS_ROOT|" -e '/.*\/$/d' -e 's/[^[:alnum:]]/\\&/g' \
|
|
"$KISS_ROOT/var/db/kiss/installed/$1/manifest" \
|
|
| xargs du -sk -- 2>/dev/null |
|
|
|
|
# Iterate over each line and convert the byte output to human
|
|
# readable (MB, KB, GB, etc).
|
|
while read -r size file || {
|
|
get_size "$tot" total >&2
|
|
break
|
|
} do
|
|
get_size "$size" "$file"
|
|
tot=$((tot + size))
|
|
done
|