#!/bin/sh # # Copyright (c) 2007 TrueStep # # Name: maczip # Author: Rory Arms - http://www.TrueStep.com/ # CDate: 2007-04-20 # Description: uses ditto(1) on OSX to generate PKZip archives that can # store HFS metadata, such as resource forks and POSIX modes, just as # the "Create Archive" command in the contextual menu of the Finder can. # When calling this script as "macunzip" it will merge the resource forks # with their corresponding data forks, just as BOMArchiveHelper does with the # Finder. If you want to just use this script for yourself, I'd suggest # installing it in ~/bin and making sure that path is added to your shell's # PATH environment variable. # Tested With: Mac OS X/powerpc 10.4.8 # # $Id: maczip,v 1.2 2007/11/26 22:58:57 rorya Exp $ NAME=`basename $0` if [ ! `uname -s` = "Darwin" ]; then echo "This OS is not supported. maczip requires Mac OS X" exit 2 fi if [ ! -x /usr/bin/ditto ]; then echo "ditto(1) not found. Are you sure this is Mac OS X?" exit 2 fi usage() { case $NAME in maczip) echo "usage: $NAME archive.zip path" break ;; unmaczip|macunzip) echo "usage: $NAME archive.zip destination"; break ;; esac } maczip() { #echo "ditto(1) -c runs here" if [ -z $1 ]; then echo "zipfile name missing" usage exit 1 elif [[ ! $(echo $1|grep -i '\.zip$') ]]; then echo "Archive name must end with .zip" usage exit 1 elif [ -z $2 ]; then echo "list of files missing" exit 1 fi ARCHIVE=$1 SRC=$2 # run ditto(1) echo "ditto -V -c -k --sequesterRsrc --keepParent $SRC $ARCHIVE" ditto -V -c -k --sequesterRsrc --keepParent $SRC $ARCHIVE if [ $? != 0 ]; then echo "error occurred" exit 2 fi } unmaczip() { #echo "ditto(1) -x runs here" if [ -z "$1" ]; then echo "Archive missing" usage exit 2 else ARCHIVE=$1 fi if [ -z "$2" ]; then DEST=`pwd` else DEST=$2 fi # run ditto(1) ditto -V -x -k --sequesterRsrc $ARCHIVE $DEST if [ $? != 0 ]; then echo "error occurred" exit 2 fi } case $NAME in maczip) maczip $* break ;; unmaczip|macunzip) unmaczip $* break ;; esac