
Я получил дистрибутив программного обеспечения Unix в виде сжатого файла cpio. Какая команда лучше всего подходит для извлечения файлов?
решение1
gzip -cd foo.cpio.gz | cpio -idmv
- i : извлечение (вход)
- d : создать каталоги
- m : сохранить mtime
- v : многословный
решение2
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), если вы извлекаете корневую файловую систему, содержащую узлы устройств.
решение3
Например, чтобы извлечь архивное содержимое /etc/httpd/ в текущий каталог, создайте подкаталоги ./etc/httpd/
mkdir restored-etc-httpd
cd restored-etc-httpd
zcat archive.cpio.gz | cpio -idmv --no-absolute-filenames "*etc/httpd/*"
Оба ответа — принятый и ответ Мэтта — были мне полезны, но на некоторое время я запутался из-за трех деталей:
- Соответствующий шаблон необходимо заключить в кавычки, чтобы он работал как шаблон :P
- Опция
--no-absolute-filenames
должна бытьпредшествоватьшаблон в командной строке - Поскольку эта опция удаляет начальные символы
/
из имен файлов, шаблон сопоставления также должен опускать начальные символы./
решение4
Эта страница Википедии наcpio
есть несколько хороших заметок.
Для получения более подробной информации см.cpio
руководство.
Ссылка с той же страницы Википедииобсуждает сравнение с tar
архивами.
И вот примериспользование cpio
с tar
форматом.