Me gustaría comprimir un archivo de texto usando la herramienta de línea de comando gzip mientras mantengo el archivo original. Por defecto ejecuta el siguiente comando
gzip file.txt
resulta en modificar este archivo y renombrarlo file.txt.gz
. En lugar de este comportamiento, me gustaría tener este nuevo archivo comprimido además del existente file.txt
. Por ahora estoy usando el siguiente comando para hacer eso
gzip -c file.txt > file.txt.gz
Funciona, pero me pregunto por qué no hay una solución más fácil para hacer una tarea tan común. ¿Tal vez me perdí la opción de hacer eso?
command-line
files
gzip
Manuel Selva
fuente
fuente
Respuestas:
Para GNU
gzip
1.6 o superior, FreeBSD y derivados o versiones recientes de NetBSD, vea la respuesta de don_cristi .Con cualquier versión, puede usar redirecciones de shell como en:
Cuando no se le da ningún argumento,
gzip
lee su entrada estándar, la comprime y escribe la versión comprimida en su salida estándar. Como beneficio adicional, al usar redirecciones de shell, no tiene que preocuparse por los archivos llamados"--help"
o"-"
(para los que este último sigue siendo un problemagzip -c --
).Otro beneficio adicional
gzip -c file > file.gz
es que sifile
no se puede abrir, el comando fallará sin crear un vacíofile.gz
(o sobrescribir uno existentefile.gz
) y sin ejecutarsegzip
en absoluto.Sin
gzip -k
embargo, una diferencia significativa en comparación es que no se intentará copiar losfile
metadatos (propiedad, permisos, tiempo de modificación, nombre del archivo sin comprimir) enfile.gz
.Además, si
file.gz
ya existía, lo anulará silenciosamente a menos que haya activado lanoclobber
opción en su shell (con,set -o noclobber
por ejemplo, en shells POSIX).fuente
-c
.-k
opcion? No se pudo encontrar en las páginas de manual, por ejemplo, esta versión aquí linux.die.net/man/1/gzip . Además, parece que gzip copia los metadatos del archivo de forma predeterminada.Tenga en cuenta que el lanzamiento reciente (junio de 2013) "acepta la opción --keep (-k), por coherencia con herramientas como xz, lzip y bzip2. Con esta opción, gzip ya no elimina los archivos de entrada con nombre al comprimir o descomprimir" .
gzip-1.6
Extracto de la página del manual:
Entonces, a partir de
1.6
, puede usar-k
o--keep
conservar el archivo original:(tenga en cuenta que no funciona si
$file
es-
(quegzip
interpreta como stdin de significado en lugar del archivo real llamado-
), en cuyo caso, debe cambiarlo a./-
)Esa opción se introdujo por primera vez en la implementación de FreeBSD de
gzip
(en FreeBSD 7.0 en 2007) para mantener la coherenciabzip2
. Esogzip
se basa en una reescritura de GNUgzip
por parte de NetBSD. La-k
opción finalmente regresó a NetBSD en 2010 .fuente
De la documentación parece que no hay opción para crear una copia del archivo.
Puedes definir una función de shell
y entonces
fuente
-
, debe llamarlo comogzipkeep ./-
.