J'utilise GNU tar. Il peut détecter automatiquement le type de compression lors de la compression / décompression de fichiers. Mais j'ai besoin de décompresser une archive de stdin et le type de compression est inconnu. J'ai remarqué que le goudron peut me donner des suggestions correctes comme:
tar: Archive is compressed. Use -z option
Mais je veux que tar utilise automatiquement cette option de compression sans me demander de saisir cet argument. Comment puis je faire ça? Pourquoi ne pas simplement décompresser tar car il connaît déjà le type de compression?
Je vous remercie!
linux
compression
tar
James
la source
la source
tar
ne sait pas sur quel type de données il se trouvestdin
jusqu'à ce qu'il le lise et qu'il soit alors trop tard pour appeler le programme de décompression. Il prend en charge gzip, bzip2 et autres. Il n'est pas facile de contourner ce problème (il faudrait mettre les données en mémoire tampon), donc il vous dit simplement de réessayer.fork()
/exec()
pour diriger les données via un utilitaire de décompression. L'utilitaire lirait à partir dustdin
tuyau et le premier 4K serait désormais manquant. Il n'y a aucun moyen de remettre les données dans le tuyau après les avoir lues.cat buffer - | gunzip
. (Alternativement, des E / S non bloquantes pourraient être utilisées pour éviter la nécessité d'un processus supplémentaire.)Réponses:
Ce n'est pas la réponse que vous voulez entendre, mais cela n'est pas pris en charge par GNU tar selon son manuel:
- 8.1.1 Création et lecture d'archives compressées
la source
Enfin, j'ai réalisé que je ne peux pas laisser tar détecter et décompresser l'archive de stdin parce que j'utilise GNU tar. Le tar BSD peut le faire automatiquement sans problème. Je décide donc d'utiliser bsdtar au lieu de tar dans mon script maintenant.
la source