#!/bin/sh set -e : ${1?"Usage: $0 12345, where 12345 is the maximum number of kilobytes to select"} maxkb=$1 srcdir=$(pwd) rm() { /bin/rm "$@" } cp() { /bin/cp "$@" } mkdir() { /bin/mkdir "$@" } die() { echo "error: $@" >&2 exit 1 } destdir=songbundle destfile=songbundle.tar [ ! -e "../$destdir" ] || die "../$destdir exists" [ ! -e "../$destfile" ] || die "../$destfile exists" trap 'rm -rf "../$destdir"' 0 INT echo "scanning for music..." find . -name '*.mp3' -o -name '*.ogg' | sort -R | ( cd .. mkdir "$destdir" cd "$destdir" while read filename; do dirname=$(dirname "$filename") [ -d "$dirname" ] || mkdir -p "$dirname" echo "copying $filename" cp -a "$srcdir/$filename" "$dirname"/. if [ "$(du -sk . | awk '{print $1}')" -gt "$maxkb" ]; then echo "okay, too big, removing" rm "$filename" break fi done cd .. tar cvf "$destfile" "$destdir" rm -rf "$destdir" ls -lh "$destfile" )