#!/bin/sh me="`basename $0`" usage(){ cat < EOF exit 1 } [ "$1" = "" ] && usage pathname="$1"; shift [ $# = 0 ] && usage echo_eval(){ echo "$@" eval "$@" } sectors(){ du "$1" | tail -n 1 | cut -f 1 } totalsectors(){ t=0 for a in "$@"; do s="`sectors \"$a\"`" t=`expr "$t" + "$s"` done echo $t } diskimagesectors(){ s=`totalsectors "$@"` s=`expr $s \* 110 / 100` [ $s -lt 1024 ] && echo 1024 || echo $s } volname="`basename \"$pathname\"`" z=`diskimagesectors "$@"` dmg="$pathname.dmg" tmp_dmg="$pathname.tmp.dmg" mnt="/tmp" volpath="$mnt/$volname" #fmt=UDRO #fmt=UDZO fmt=UDBZ #fmt=UDRW echo_eval hdiutil create -sectors ${z} "'$tmp_dmg'" -type UDIF -fs HFS+ -volname "'$volname'" -layout NONE -quiet && echo_eval hdiutil attach "'$tmp_dmg'" -mountroot "'$mnt'" -quiet && { echo "tar cf - \"$@\" | ( cd \"$volpath\" && tar xf - )" && tar cf - "$@" | ( cd "$volpath" && tar xf - ) } && echo_eval hdiutil detach "'$volpath'" -quiet && echo_eval hdiutil convert "'$tmp_dmg'" -format $fmt -o "'$dmg'" -quiet && echo_eval rm -f "'$tmp_dmg'" && echo "$dmg" && exit 0 || { echo_eval hdiutil detach "'$volpath'" -quiet && echo_eval rm -f "'$tmp_dmg'" || true echo $0: error at making "$dmg" [ -d "$volpath" ] && echo hdiutil detach "$volpath" -quiet [ -f "$tmp_dmg" ] && echo rm -f "$tmp_dmg" [ -f "$dmg" ] && echo rm -f "$dmg" exit 1 }