1 votos

Manera infalible de la extracción .archivos pkg

Sé que hay algunos pagaron GUI herramientas que te permiten hacer esto, pero no estoy interesado en ellos.

Actualmente, estoy haciendo esto:

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

Sin embargo, hay algunos archivos pkg que son ahora xar archivos y necesito pkgutil para extraer de ellos. Y probablemente hay otras permutaciones de pkg spec que no soy consciente.

Línea de fondo es que siempre se puede encontrar alguna manera manualmente conseguir las cosas de la pkg, pero me gustaría un one-shot solución que podría hacer esto de forma automática sin tener que preocuparse acerca de la pkg implementación, decir:

unpkg CrappyPackage.pkg

Hace tal cosa existe?

Tal vez la más infalible es usar el instalador del sistema en sí, sino que parece que siempre se necesita un sistema completo de la unidad como su objetivo. Sería realmente útil si se pudiera hacer algo a lo largo de las líneas de:

installer -pkg CrappyPackage.pkg -target SomeEmptySandbox.dmg

Sé que hay es esta pregunta: ¿Cómo puedo abrir una .archivo pkg manualmente? Sin embargo, todas las soluciones ofrecidas no son bastante manual y estoy haciendo ahora mismo de todos modos.

4voto

moodforaday Puntos 2633

Es bastante fácil crear un shell script que comprueba un par de condiciones y, a continuación, toma la acción apropiada.

He puesto la mía en http://dl.dropbox.com/u/18414/bin/unpkg.sh pero se copia la versión inicial a continuación:

#!/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 ha sido incluido en Mac OS X para varios comunicados de ahora. Yo prefiero sobre /bin/sh porque... bueno, no vamos a entrar en un "mi concha es mejor que su cáscara" de la guerra, porque mi concha iba a ganar :-)

En cualquier caso, zsh hace las cosas un poco más fácil y un poco más agradable, y que está incluido, así que no hay razón para no utilizarla, de la OMI. Especialmente para un OS X script específico como este.

Esto fue probado en 10.7.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X