Как я могу создать сжатую смолу в Sun Solaris?

11

Я вошел в ОС Sun Solaris. Я хочу создать и извлечь сжатый файл tar. Я попробовал эту обычную команду UNIX:

tar -cvzf file.tar.gz directory1

Не удается выполнить в Sun OS со следующей ошибкой

bash-3.2$ tar -cvzf file.tar.tz directory1
tar: z: unknown function modifier
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...
Гириш Сункара
источник
2
Почему вы думаете, что это нормальная команда UNIX?
Чайба
Я думаю, вам нужно потратить некоторое время на чтение различий между инструментами Unixes Linux и GNU.
coteyr
4
Когда они добавили этот zфлаг в GNU tar, мы потеряли наш лучший пример для обучения людей тому, как логически мыслить и строить конвейер ...

Ответы:

27

Чтобы избежать создания временного промежуточного файла, вы можете использовать эту команду

tar cvf - directory1|gzip -c >file.tar.gz
Ромео Нинов
источник
2
Это имеет потенциальное преимущество в том, что некоторая обработка может происходить параллельно.
psmears
Требуется ли f -или Solaris tarвыводит на стандартный вывод по умолчанию?
Марка
2
@Mark: согласно странице справочника , «Если fопущено, tarбудет использоваться устройство, указанное в TAPEпеременной среды, если оно установлено; в противном случае оно будет использовать значения по умолчанию, определенные в /etc/default/tar.» Так что нет, похоже, вы не можете с уверенностью предположить, что f -это не нужно.
Илмари
@ Ромео: Спасибо за ответ, я нашел это полезным. Можете ли вы уточнить, почему "-" необходимо между cvf и именем каталога? Кроме того, я попробовал вашу команду на нескольких ОС - Solaris 10, 11.4, Linux (RHEL, CentOS, Oracle и т. Д.) И работает последовательно. Я также просмотрел соответствующие man-страницы tar - почему вышеописанное работает в Linux без "-" до cvf? Я ожидаю, что Linux потребует что-то вроде «tar -cvf ....» Еще раз спасибо за ответ.
rc1
@ rc1, тире в tar означает, что вы установили выходной файл как STDOUT. Есть два стиля параметров, BSD и SYSV. И Linux tar работает с ними обоими (с и без черточки перед cvf)
Ромео Нинов
10

Похоже, Solaris tarне умеет сжимать. Так что просто сделайте это вручную:

tar -cvf file.tar directory1 && gzip file.tar

Это все, что -zделает переключатель GNU tar, в любом случае. Команда выше произведет file.tar.gz.

Тердон
источник
Это будет работать (если у вас достаточно свободного дискового пространства для хранения промежуточного несжатого file.tarархива), но это излишне медленное и расточительное дисковое пространство. Я не могу представить себе ситуацию, в которой это было бы предпочтительнее ответа Ромео Нинова .
Илмари
1
@IlmariKaronen я тоже не могу. Сначала я подумал об этом.
Тердон
2

Проверьте, SUNWgtarустановлены ли вы . Это версия GNU tarи предоставляет, /usr/sfw/bin/gtarкоторая позволит использовать параметры GNU для tar.

MikeA
источник
-1

Пожалуйста, попробуйте команду ниже

tar -cvf file.tar directory1 && gzip file.tar

(чтобы сжать файл на Solaris)

gunzip file.tar.gz

(расстегнуть молнию)

Нилеш Варшней
источник
1
Это не добавляет целую кучу за пределы предыдущего ответа
Джефф Шаллер
Он также просто выгружает весь файл tar (включая все двоичные файлы в заголовках) на терминал, а не разархивирует файлы. Вам, вероятно, потребуется перезагрузить терминал позже.
Paul_Pedant