Як я можу створити стиснутий дьоготь на сонці?


11

Я увійшов у систему Sun Solaris OS. Я хочу створити і витягти стислий файл 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?
schaiba

Я думаю, вам потрібно витратити деякий час на читання розбіжностей між інструментами Unixes Linux та GNU.
coteyr

4
Коли вони додали цей zпрапор до гудрону GNU, ми втратили наш найкращий приклад для навчання людей, як мислити логічно і будувати трубопровід ...

Відповіді:


28

Щоб уникнути створення тимчасового проміжного файлу, ви можете скористатися цією командою

tar cvf - directory1|gzip -c >file.tar.gz

2
Це має потенційну перевагу в тому, що частина обробки може відбуватися паралельно.
psmears

Чи f -потрібно, або Solaris tarвиводить у stdout за замовчуванням?
Марк

2
@Mark: Згідно з довідковою сторінкою , "Якщо fцей пункт пропущено, він tarбуде використовувати пристрій, вказаний TAPEзмінною оточення, якщо він встановлений; в іншому випадку він використовуватиме значення за замовчуванням, визначені в /etc/default/tar." Отже, ні, це не виглядає так, що ви можете сміливо припускати, що f -це не потрібно.
Ільмарі Каронен

@Romeo: Дякую за відповідь, я вважаю це корисним. Чи можете ви пояснити, чому потрібен "-" між cvf та назвою каталогу? Крім того, я спробував вашу команду на кількох ОС - Solaris 10, 11.4, Linux (RHEL, CentOS, Oracle та ін.) І працює стабільно. Я також розглянув відповідні сторінки tar man - чому вищезазначене працює в Linux без "-" перед cvf? Я би сподівався, що Linux вимагатиме чогось типу "tar -cvf ...." Ще раз дякую за відповідь.
rc1

@ rc1, тире в тарі означає, що ви встановите вихідний файл 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 також не можу. Я просто подумав про це спочатку.
terdon

2

Перевірте, чи SUNWgtarвстановлено ви . Це версія GNU tarі надає, /usr/sfw/bin/gtarщо дозволить використовувати параметри GNU для націлювання.


-1

Спробуйте нижче команду

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

(для завантаження файлу на solaris)

gunzip file.tar.gz

(скасувати)


1
Це не додасть цілого ряду, ніж попередня відповідь
Джефф Шаллер

Він також просто скидає весь файл tar (включаючи всі двійкові у заголовках) на термінал, а не скасовувати файли. Ймовірно, після цього потрібно буде скинути термінал.
Paul_Pedant
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.