Modo infallibile per estrarre i file .pkg

1

So che ci sono alcuni strumenti GUI a pagamento che ti permettono di farlo, ma non sono interessato a quelli.

Attualmente sto facendo questo:

gzcat Contents/Archive.pax.gz | pax -r

Tuttavia, ci sono alcuni file pkg che ora sono archivi xar e ho bisogno di pkgutil per estrarli. E probabilmente ci sono altre permutazioni delle specifiche pkg di cui non sono a conoscenza.

La linea di fondo è che posso sempre trovare il modo di estrarre manualmente il materiale dal pkg, ma mi piacerebbe una soluzione one-shot che lo farebbe automaticamente senza preoccuparsi dell'implementazione specifica del pkg, diciamo:

unpkg CrappyPackage.pkg

Esiste una cosa del genere?

Forse il modo più infallibile è usare il programma di installazione di sistema stesso, ma sembra che abbia sempre bisogno di un'unità di sistema completa come obiettivo. Sarebbe davvero utile se potessi fare qualcosa sulla falsariga di:

installer -pkg CrappyPackage.pkg -target SomeEmptySandbox.dmg

So che c'è questa domanda: Come posso aprire un file .pkg manualmente? Tuttavia, tutte le soluzioni offerte sono piuttosto manuali e le sto facendo comunque adesso.

    
posta kLy 29.12.2011 - 17:13
fonte

1 risposta

4

È abbastanza facile creare uno script di shell che controlli alcune condizioni e poi prenda l'azione appropriata.

Ho inserito il mio nel link , ma copierò la versione iniziale di seguito:

#!/bin/zsh
#
#   Author:     Timothy J. Luoma
#   Email:      luomat at gmail dot com
#   Date:       2011-12-29
#
#   Purpose:    extract .pkg files, either xar archives or directory
#               
#   URL:       http://dl.dropbox.com/u/18414/bin/unpkg.sh
#   
#   See also:  http://apple.stackexchange.com/questions/34957/foolproof-way-of-extracting-pkg-files

NAME="$0:t"

    # Brief explanation of how program works
USAGE="$NAME is meant to extract package files. (Filenames must end in .pkg). Can handle both .pkg directories or xar archives.

Usage: $NAME /path/to/foo.pkg
"

    # in case of emergency, report error and exit
die ()
{
    echo "$NAME: $@"
    exit 1
}

    # if not given any input, explain how to use it
if [ "$#" = "0" ]
then
        die "$USAGE"    
fi

    # put whatever we get as an argument into a variable
INPUT="$@"

    # does the input actual refer to an existing file?
    # if not, exit
[[ -e "$INPUT" ]]       || die "$INPUT does not exist"

    # get the extension of the input. i.e. if we are
    # given "foo.pkg" this will just be "pkg"
EXT="$INPUT:e"

    # check to make sure that the extension is 'pkg'
    # because that's what we're looking for
[[ "$EXT" = "pkg" ]]    || die "$INPUT is not a pkg"

TYPE='file -b "$INPUT"'

case "$TYPE" in 
    directory)
                gzcat "$INPUT/Contents/Archive.pax.gz" | pax -r

    ;;

    "xar archive - version 1")
                # Put whatever commands you want here
                :
    ;;


    *)
            die "$USAGE"    
    ;;

esac



exit 0
#EOF

zsh è ora incluso in Mac OS X per diverse versioni. Lo preferisco sopra / bin / sh perché ... beh, non entriamo in una guerra "la mia shell è meglio della tua shell", perché la mia shell vincerebbe :-)

In ogni caso, zsh rende le cose un po 'più semplici e un po' più belle, ed è incluso, quindi non c'è motivo per non usarlo, IMO. Soprattutto per uno script specifico per OS X come questo.

Questo è stato testato il 10.7.

    
risposta data 29.12.2011 - 19:56
fonte

Leggi altre domande sui tag