J'aimerais compresser un fichier texte à l'aide de l'outil de ligne de commande gzip tout en conservant le fichier d'origine. Par défaut, en exécutant la commande suivante
gzip file.txt
permet de modifier ce fichier et de le renommer file.txt.gz
. au lieu de ce comportement, j'aimerais avoir ce nouveau fichier compressé en plus de celui existant file.txt
. Pour l'instant, j'utilise la commande suivante pour le faire
gzip -c file.txt > file.txt.gz
Cela fonctionne mais je me demande pourquoi il n’existe pas de solution plus simple pour effectuer une tâche aussi commune. Peut-être que j'ai raté l'option de faire ça?
command-line
files
gzip
Manuel Selva
la source
la source
Réponses:
Pour GNU
gzip
1.6 ou supérieur, FreeBSD et ses dérivés ou versions récentes, NetBSD, voir la réponse de don_cristi .Avec n'importe quelle version, vous pouvez utiliser les redirections du shell comme suit:
Quand aucun argument n'est fourni,
gzip
lit son entrée standard, la compresse et écrit la version compressée sur sa sortie standard. En prime, lorsque vous utilisez des redirections dans un shell, vous n'avez pas à vous soucier des fichiers appelés"--help"
ou"-"
(ces derniers étant toujours un problèmegzip -c --
).Un autre avantage
gzip -c file > file.gz
est que si ellefile
ne peut pas être ouverte, la commande échouera sans créer un videfile.gz
(ou écraser un existantfile.gz
) et sans exécutergzip
du tout.Une différence significative par rapport à
gzip -k
cependant est qu’il n’y aura aucune tentative de copier lesfile
métadonnées de (s) (propriété, autorisations, date de modification, nom du fichier non compressé) dansfile.gz
.De plus, s'il
file.gz
existait déjà, il la remplacera silencieusement à moins que vous n'ayez activé l'noclobber
option dans votre shell (avecset -o noclobber
par exemple dans les shells POSIX).la source
-c
.-k
option? Impossible de le trouver dans les pages de manuel, par exemple cette version ici linux.die.net/man/1/gzip . En outre, il semble que gzip copie les métadonnées du fichier par défaut.Notez que l' édition récente (juin 2013) "accepte l'option --keep (-k), par souci de cohérence avec des outils tels que xz, lzip et bzip2. Avec cette option, gzip ne supprime plus les fichiers d'entrée nommés lors de la compression ou de la décompression" .
gzip-1.6
Extrait de la page de manuel:
Donc, à partir de
1.6
, vous pouvez utiliser-k
ou--keep
conserver le fichier original:(notez que cela ne fonctionne pas si
$file
est-
(ce quigzip
interprète en tant que stdin au lieu du fichier appelé-
), auquel cas vous devez le changer en./-
)Cette option a été introduite pour la première fois dans l’implémentation de
gzip
FreeBSD (dans FreeBSD 7.0 en 2007) par souci de cohérence avecbzip2
. Cecigzip
est basé sur une réécriture de GNUgzip
par NetBSD. L’-k
option a finalement été rendue à NetBSD en 2010 .la source
D'après la documentation, il semble qu'il n'y ait pas d'option pour créer une copie du fichier.
Vous pouvez définir une fonction shell
puis
la source
-
, vous devez l'appeler commegzipkeep ./-
.