Книга: Искусство программирования на языке сценариев командной оболочки

Пример 12-23. Распаковка архива rpm

Пример 12-23. Распаковка архива rpm

#!/bin/bash

# de-rpm.sh: Распаковка архива 'rpm'

: ${1?"Порядок использования: `basename $0` target-file"}

# Сценарию должно быть передано имя архива 'rpm'.

TEMPFILE=$$.cpio # Временный файл с "уникальным" именем.

# $$ -- PID процесса сценария.

rpm2cpio < $1 > $TEMPFILE # Конверсия из rpm в cpio.

cpio --make-directories -F $TEMPFILE -i # Рапсковка cpio-архива.

rm -f $TEMPFILE # Удаление cpio-архива.

exit 0

# Упражнение:

# Добавьте проверку на: 1) Существование "target-file"

#+ 2) Действительно ли "target-file" является rpm-архивом.

# Подсказка: используйте комсанду 'file'.

Сжатие

gzip

Стандартная GNU/UNIX утилита сжатия, заменившая более слабую, и к тому же проприетарную, утилиту compress. Соответствующая утилита декомпрессии (разжатия) -- gunzip, которая является эквивалентом команды gzip -d.

Для работы со сжатыми файлами в конвейере используется фильтр zcat, который выводит результат своей работы на stdout, допускает перенаправление вывода. Фактически это та же команда cat, только приспособленная для работы со сжатыми файлами (включая файлы, сжатые утилитой compress). Эквивалент команды zcat -- gzip -dc.


В некоторых коммерческих версиях UNIX, команда zcat является синонимом команды uncompress -c, и не может работать с файлами, сжатыми с помощью gzip.

См. также Пример 7-7.

bzip2

Альтернативная утилита сжатия, обычно дает более высокую степень сжатия (но при этом работает медленнее), чем gzip, особенно это проявляется на больших файлах. Соответствующая утилита декомпрессии -- bunzip2.


В современные версии tar добавлена поддержка bzip2.

compress, uncompress

Устаревшие проприетарные утилиты для работы с архивами, входящие в состав некоторых коммерческих дистрибутивов UNIX. В последнее время вытесняются более мощной утилитой gzip. Linux-дистрибутивы, как правило, включают в свой состав эти утилиты для обратной совместимости, однако gunzip корректно разархивирует файлы, обработанные с помощью compress.


Утилита znew предназначена для преобразования compress-архивов в gzip-архивы.

sq

Еще одна утилита-фильтр сжатия, которая обслуживает только отсортированные списки слов. Использует стандартный, для фильтров, синтаксис вызова -- sq < input-file > output-file. Быстрая, но не такая эффективная как gzip. Соответствующая ей утилита декомпрессии называется unsq, синтаксис вызова аналогичен утилите sq.


Вывод от sq может быть передан по конвейеру утилите gzip, для дальнейшего сжатия.

zip, unzip

Кроссплатформенная утилита архивирования и сжатия, совместимая, по формату архивного файла, с утилитой DOS -- pkzip.exe. "Zip"-архивы, по-моему, более приемлемый вариант для обмена данными через Internet, чем "tarballs" (тарболлы, или tar-архивы).

unarc, unarj, unrar

Этот набор утилит предназначен для распаковки архивов, созданных с помощью DOS архиваторов -- arc.exe, arj.exe и rar.exe.

Получение сведений о файлах

file

Утилита идентификации файлов. Команда file file-name верне тип файла file-name, например, ascii text или data. Для этого она анализирует сигнатуру, или магическое число и сопоставляет ее со списком известных сигнатур из /usr/share/magic, /etc/magic или /usr/lib/magic (в зависимости от дистрибутива Linux/UNIX).

-f -- ключ пакетного режима работы утилиты file, в этом случае утилита принимает список анализируемых имен файлов из заданного файла. Ключ -z используется для анализа файлов в архиве.

bash$ file test.tar.gz

test.tar.gz: gzip compressed data, deflated, last modified: Sun Sep 16 13:34:51 2001, os: Unix

bash file -z test.tar.gz

test.tar.gz: GNU tar archive (gzip compressed data, deflated, last modified: Sun Sep 16 13:34:51 2001, os: Unix)

Оглавление книги


Генерация: 1.186. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз