comando de extracto básico cpio, equivalente 'tar xzvf'?

12

Recibí una distribución de software de Unix como un archivo cpio comprimido. ¿Cuál es el mejor comando para extraer los archivos?

Mark Harrison
fuente
¿Cuándo hiciste man cpiolo que viste?
55
Veo: -i -o -p -t -B -c -C -f -F -H -M -n -v -V -W -b -r -s -S -E -A -O -l - 0 -a -I -L -R -d -m -u -? --extract --create --pass-through --list --block-size = --io-size = --force-local --nonmatching --file = --format = --message = --numeric- uid-gid --quiet --rsh-command = --verbose --dot --warning = --swap --rename --swap-bytes --swap-halfwords --to-stdout --pattern-file = - -solo-verificar-crc --append --link --absolute-filenames --no-absolute-filenames --null --reset-access-time --dereference --owner = --make-directorios --preserve- la modificación en tiempo --no-preserve-propietario --sparse --unconditional
Mark Harrison

Respuestas:

11
gzip -cd foo.cpio.gz | cpio -idmv
  • i: extraer (entrada)
  • d: crear directorios
  • m: preservar mtime
  • v: detallado
Mark Harrison
fuente
3
mkdir archive
cd archive
zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames

Si bien esta es una pregunta antigua, aparece en Google, por lo que pensé que podría actualizarla. Estoy de acuerdo con la respuesta aceptada en general, pero debe agregar "--no-absolute-filenames" a menos que tenga la intención de sobrescribir archivos importantes del sistema en su máquina. Además, personalmente, prefiero "zcat" sobre "gzip -cd" o "gunzip -c".

Finalmente, tenga en cuenta que necesita ejecutar cpio como root (por ejemplo, sudo) si está extrayendo un sistema de archivos raíz que contiene nodos de dispositivo.

Mate
fuente
0

Por ejemplo, para extraer el contenido archivado de / etc / httpd / en el directorio actual, creando subdirectorios ./etc/httpd/

mkdir restored-etc-httpd
cd restored-etc-httpd    
zcat archive.cpio.gz | cpio -idmv --no-absolute-filenames "*etc/httpd/*"

La respuesta aceptada y la de Matt fueron útiles para mí, pero me quedé perplejo por un tiempo debido a tres detalles:

  1. El patrón coincidente necesita ser citado para funcionar como un patrón: P
  2. La opción --no-absolute-filenamesdebe preceder al patrón en la línea de comando
  3. Dado que esa opción elimina el inicio /de los nombres de archivo, el patrón coincidente también debe omitir el inicio/
Chris D'Amato
fuente