Как извлечь конкатенированный архив cpio?

% find a/ | cpio -o | gzip -c > alpha.gz
% find b/ | cpio -o | gzip -c > bravo.gz
% cat alpha.gz beta.gz > charlie.gz
% gunzip charlie.gz

Теперь я получаю файл Чарли, который должен быть составным архивом cpio. Но cpio -id < charlie только извлечь содержимое а /. Как я мог получить б / у?

Добавлено: Размер Чарли равен альфа плюс браво. И, например, некоторые ключевые слова показали, что Чарли, безусловно, содержит данные Браво.

1 ответ

Решение

Архивы 'alpha' и 'bravo' независимо содержат маркеры конца архива, которые сообщают cpio, что это сделано. Это полезно при чтении с ленты, поскольку архив заканчивается, но лента может продолжаться.

Так же, как при чтении с ленты, вам нужно запустить еще один запуск cpio из той же позиции; В общем, потому что вы знаете, что у вас есть только архивы cpio, но, возможно, не совсем уверены, сколько: (while cpio -id ; do :; done) < charlie будет успешно работать до тех пор, пока не возникнут ошибки cpio ("преждевременный конец архива", когда eof достигнут).

Другие вопросы по тегам