I haven’t written much this past week because I’ve been upgrading all the home’s machines to Leopard. So far it’s gone very smoothly, and I like the new OS!
The script for this week is about disk images. Since version 10.4 of the
operating system, OS X has had the ability to internally (and transparently)
compress disk images using bzip2
. Probably because of compatibility issues
with 10.3, I rarely ever see vendors compressing their disk images this way (I
even see them using gzip
on the image after it’s made, which makes no sense at
all since internal gzip
compression has been supported for a long time!). And
so I wrote this script, which re-compresses disk image files using internal
bzip2
compression. This can result in significant space savings over many
images. And if it’s already been compressed with bzip2
, the script reports
this and changes nothing.
Here it is, which I call bzdmg
:
#!/bin/bash
if (( $# == 0 )); then
echo "usage: bzdmg "
exit 1
fi
for file in "$@"; do
FORMAT=$(hdiutil imageinfo "$file" | grep ^Format:)
if [[ "$FORMAT" == "Format: UDBZ" ]]; then
echo $file is already compressed with bzip.
else
TEMP=/tmp/image-$$.dmg
if hdiutil convert -format UDBZ -o $TEMP "$file"; then
mv -f $TEMP "$file" 2> /dev/null
if [[ -f $TEMP ]]; then
echo Error converting disk image file '$file'
rm -f $TEMP
fi
fi
fi
done