Comment puis-je créer un goudron compressé dans sun solaris?

11

Je suis connecté à Sun Solaris OS. Je veux créer et extraire un fichier tar compressé. J'ai essayé cette commande UNIX normale:

tar -cvzf file.tar.gz directory1

Il ne parvient pas à s'exécuter dans Sun OS avec l'erreur suivante

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}...
Girish Sunkara
la source
2
Pourquoi pensez-vous que c'est une commande UNIX normale?
schaiba
Je pense que vous devez passer un peu de temps à lire sur les différences entre les outils Unixes Linux et GNU.
coteyr
4
Quand ils ont ajouté ce zdrapeau à GNU tar, nous avons perdu notre meilleur exemple pour enseigner aux gens comment penser logiquement et construire un pipeline ...

Réponses:

28

Pour éviter la création d'un fichier intermédiaire temporaire, vous pouvez utiliser cette commande

tar cvf - directory1|gzip -c >file.tar.gz
Roméo Ninov
la source
2
Cela présente l'avantage potentiel qu'une partie du traitement peut avoir lieu en parallèle.
psmears
Est-ce f -nécessaire ou Solaris tarsort-il par défaut sur stdout?
Mark
2
@Mark: Selon la page de manuel , "Si fest omis, tarutilisera le périphérique indiqué par la TAPEvariable d'environnement, s'il est défini; sinon, il utilisera les valeurs par défaut définies dans /etc/default/tar." Donc, non, il ne semble pas que vous puissiez supposer en toute sécurité que ce f -n'est pas nécessaire.
Ilmari Karonen
@Romeo: Merci pour la réponse, je l'ai trouvée utile. Pouvez-vous expliquer pourquoi "-" est nécessaire entre le CVF et le nom du répertoire? De plus, j'ai essayé votre commande sur plusieurs systèmes d'exploitation - Solaris 10, 11.4, Linux (RHEL, CentOS, Oracle, etc.) et fonctionne de manière cohérente. J'ai également passé en revue les pages de manuel tar respectives - pourquoi les éléments ci-dessus fonctionnent-ils sous Linux sans "-" avant le CVF? Je m'attendrais à ce que Linux nécessite quelque chose comme "tar -cvf ...." Merci encore pour la réponse.
rc1
@ rc1, le tiret dans tar signifie que vous définissez le fichier de sortie sur STDOUT. Il existe deux styles de paramètres, BSD et SYSV. Et Linux tar fonctionne avec les deux (avec et sans tiret avant cvf)
Romeo Ninov
10

On dirait que Solaris tarne sait pas comment compresser. Alors faites-le simplement manuellement:

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

C'est tout ce que fait le -zchangement de tar GNU, de toute façon. La commande ci-dessus va produire file.tar.gz.

terdon
la source
Cela fonctionnera (tant que vous avez suffisamment d'espace disque disponible pour stocker l' file.tararchive intermédiaire non compressée ), mais c'est inutilement lent et gaspilleur d'espace disque. Je ne peux penser à aucune situation où cela serait préférable à la réponse de Roméo Ninov .
Ilmari Karonen
1
@IlmariKaronen non plus. Je viens de penser à cela en premier.
terdon
2

Vérifiez si vous avez SUNWgtarinstallé. Ceci est la version GNU de taret fournit /usr/sfw/bin/gtarce qui permettra l'utilisation des options GNU pour tarer.

MikeA
la source
-1

Veuillez essayer ci-dessous la commande

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

(pour compresser le fichier sur Solaris)

gunzip file.tar.gz

(dézipper)

Nilesh Varshney
la source
1
Cela n'ajoute pas tout un tas au -
Jeff Schaller
Il vide également tout le fichier tar (y compris tous les binaires dans les en-têtes) sur le terminal, au lieu de désarchiver les fichiers. Vous devrez probablement réinitialiser le terminal par la suite.
Paul_Pedant