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