базовая команда извлечения cpio, эквивалент 'tar xzvf'?

12

Я получил дистрибутив программного обеспечения Unix в виде сжатого файла cpio. Какая лучшая команда для извлечения файлов?

Марк Харрисон
источник
Когда ты сделал man cpioто, что увидел?
5
Я вижу: -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-verify-crc --append --link --absolute-filenames --no-absolute-filenames --null --reset-access-time --dereference --owner = --make-directoryies --preserve- время модификации --no-preserve-owner --sparse --unconditional
Марк Харрисон

Ответы:

11
gzip -cd foo.cpio.gz | cpio -idmv
  • я: извлечение (ввод)
  • d: создавать каталоги
  • m: сохранить mtime
  • V: многословный
Марк Харрисон
источник
3
mkdir archive
cd archive
zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames

Хотя это старый вопрос, он показывается высоко в Google, поэтому я подумал, что могу его обновить. Я в целом согласен с принятым ответом, но вы должны добавить «--no-absolute-filenames», если вы не собираетесь перезаписывать важные системные файлы на вашем компьютере. Кроме того, лично я предпочитаю "zcat", а не "gzip -cd" или "gunzip -c".

Наконец, обратите внимание, что вам нужно запустить cpio от имени root (например, sudo), если вы извлекаете корневую файловую систему, которая содержит узлы устройств.

Matt
источник
0

Например, чтобы извлечь архивное содержимое / etc / httpd / в текущий каталог, создав подкаталоги ./etc/httpd/

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

Принятый ответ и ответ Мэтта были мне полезны, но я на некоторое время был в тупике из-за трех деталей:

  1. Соответствующий шаблон должен быть заключен в кавычки, чтобы работать как шаблон: P
  2. Опция --no-absolute-filenamesдолжна предшествовать шаблону в командной строке
  3. Так как эта опция удаляет ведущие /из имен файлов, соответствующий шаблон должен также опускать ведущие/
Крис д'Амато
источник