······echo "Skipped file ${name}: It's already compressed."
······continue
····else
······echo "Warning: Trying to double-compress $name"
····fi
··fi
··# Запустить параллельное сжатие файла тремя инструментами.
··$gz < "$name" > $gzout &
··$bz < "$name" > $bzout &
··wait # ждать, пока все три инструмента завершат сжатие.
··# Выявить файл, сжатый лучше всех.
····awk '{print $5"="NR}' | sort −n | cut −d= −f2 | head -1)"
··case "$smallest" in
········;;
····2) echo Best compression is with compress. File renamed ${name}.Z
········mv $Zout "${name}.Z"; rm −f "$name"
········;;
····3) echo Best compression is with gzip. File renamed ${name}.gz
········mv $gzout "${name}.gz"; rm −f "$name"
········;;
····4) echo Best compression is with bzip2. File renamed ${name}.bz2
········mv $bzout "${name}.bz2"; rm −f "$name"
··esac
done
exit 0
Как это работает
Самая интересная строка в сценарии —
Обратите также внимание на строку
Запуск сценария
Этому сценарию следует передать список имен файлов для сжатия. Если какой-то из них окажется сжатым и вы хотите попробовать сжать его еще сильнее, используйте флаг −a; иначе сжатые файлы будут пропущены.
Результаты
Лучше всего продемонстрировать работу сценария на примере сжатия файла, который показан в листинге 4.20.
Листинг 4.20. Вывод команды ls показывает, что в каталоге присутствует файл со сказкой «Алиса в Стране Чудес». Обратите внимание, что файл имеет размер 154872 байт
$ ls −l alice.txt
-rw-r-r- 1 taylor staff 154872 Dec 4 2002 alice.txt
Сценарий скрывает, что сжатие выполняется тремя утилитами, и просто выводит окончательный результат, как показано в листинге 4.21.
Листинг 4.21. Запуск сценария bestcompress для сжатия файла alice.txt
$ bestcompress alice.txt
Best compression is with compress. File renamed alice.txt.Z
Как показано в листинге 4.22, сжатый файл получился намного меньше оригинала.
Листинг 4.22. Размер сжатого файла (66287 байт) значительно уменьшился с размером оригинала, как было показано в листинге 4.20
$ ls −l alice.txt.Z
-rw-r-r- 1 taylor wheel 66287 Jul 7 17:31 alice.txt.Z
Глава 5. Системное администрирование: управление пользователями