unset IFS
set -euo pipefail
usage() {
printf "Usage: %s <OPTIONS> <source>\n" "$0"
printf "\n"
printf -- "-C <dir>\tChange directory (default: .)\n"
printf -- "-a <app>\tCustomize app name (required)\n"
printf -- "-h\t\tShow usage menu\n"
}
DIR='.'
APP=''
while [ "$#" -ge 1 ]; do
case "$1" in
'-C')
shift
if [ "$#" -eq 0 ]; then
usage
fi
DIR="$1"
shift
;;
'-a')
shift
if [ "$#" -eq 0 ]; then
usage
fi
APP="$1"
shift
;;
'-h')
usage
exit
;;
*)
break
;;
esac
done
if [ "$#" != '1' ]; then
usage
exit 1
fi
SOURCE="$1"
if [ -z "$APP" ]; then
usage
exit 1
fi
SOURCE_ABS="$(readlink -f "$DIR/$SOURCE")"
PORTS="$DIR/$APP-ports"
mkdir -p "$PORTS"
PORTS_ABS="$(readlink -f "$PORTS")"
find "$SOURCE_ABS" -type d -depth 1 -print0 | while IFS= read -r -d '' D; do
D="${D#"$SOURCE_ABS"/}"
MODE='--mode=0755'
if [ "$(find "$SOURCE_ABS/$D" -type f -name '*.*')" != '' ]; then
MODE='--mode=0644'
fi
cd "$SOURCE_ABS/$D"
tar "$MODE" -czf "$PORTS_ABS/$APP-$D.tgz" -- *
cd "$SOURCE_ABS"
done
echo "tarballs copied to \"$PORTS\""