comando extrato básico do cpio, equivalente 'tar xzvf'?

12

Eu recebi uma distribuição de software Unix como um arquivo cpio compactado. Qual é o melhor comando para extrair os arquivos?

Mark Harrison
fonte
Quando você fez man cpioo que viu?
5
Eu vejo: -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 = - -only-verifica-crc --append --link --absolute-filenames --no-absolute-filenames --null --reset-access-time --dereference --owner = --make-directory --preserve- modificação em tempo --no-preservá-proprietário --sparse --unconditional
Mark Harrison

Respostas:

11
gzip -cd foo.cpio.gz | cpio -idmv
  • i: extrair (entrada)
  • d: criar diretórios
  • m: preservar o mtime
  • v: detalhado
Mark Harrison
fonte
3
mkdir archive
cd archive
zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames

Embora essa seja uma pergunta antiga, ela aparece no Google, então pensei em atualizá-la. Concordo com a resposta aceita em geral, mas você deve adicionar "--no-absolute-filenames", a menos que pretenda sobrescrever arquivos importantes do sistema em sua máquina. Além disso, pessoalmente, prefiro "zcat" a "gzip -cd" ou "gunzip -c".

Por fim, observe que você precisa executar o cpio como root (por exemplo, sudo) se estiver extraindo um sistema de arquivos raiz que contém nós do dispositivo.

Matt
fonte
0

Por exemplo, para extrair o conteúdo arquivado de / etc / httpd / para o diretório atual, criando subdiretórios ./etc/httpd/

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

A resposta aceita e a de Matt foram úteis para mim, mas fiquei perplexo por um tempo por causa de três detalhes:

  1. O padrão de correspondência precisa ser citado para funcionar como um padrão: P
  2. A opção --no-absolute-filenamesdeve preceder o padrão na linha de comandos
  3. Como essa opção remove a principal /dos nomes de arquivos, o padrão correspondente também deve omitir a principal/
Chris D'Amato
fonte