Gostaria de compactar um arquivo de texto usando a ferramenta de linha de comando gzip, mantendo o arquivo original. Por padrão, executando o seguinte comando
gzip file.txt
resulta na modificação e renomeação desse arquivo file.txt.gz
. em vez desse comportamento, eu gostaria de ter esse novo arquivo compactado além do existente file.txt
. Por enquanto, estou usando o seguinte comando para fazer isso
gzip -c file.txt > file.txt.gz
Funciona, mas estou me perguntando por que não há uma solução mais fácil para executar uma tarefa tão comum? Talvez eu tenha perdido a opção de fazer isso?
command-line
files
gzip
Manuel Selva
fonte
fonte
Respostas:
Para o GNU
gzip
1.6 ou superior, FreeBSD e derivados ou versões recentes do NetBSD, consulte a resposta de don_cristi .Com qualquer versão, você pode usar os redirecionamentos de shell como em:
Quando não recebe nenhum argumento,
gzip
lê sua entrada padrão, compacta-a e grava a versão compactada em sua saída padrão. Como um bônus, ao usar redirecionamentos de shell, você não precisa se preocupar com arquivos chamados"--help"
ou"-"
(esse último ainda está sendo um problemagzip -c --
).Outro benefício
gzip -c file > file.gz
é que, sefile
não puder ser aberto, o comando falhará sem criar um vaziofile.gz
(ou substituir um existentefile.gz
) e sem executargzip
.Uma diferença significativa em relação ao fato
gzip -k
é que não haverá tentativa de copiar osfile
metadados (propriedade, permissões, hora da modificação, nome do arquivo descompactado) parafile.gz
.Além disso, se
file.gz
já existir, o substituirá silenciosamente, a menos que você tenha ativado anoclobber
opção no seu shell (set -o noclobber
por exemplo, em shells POSIX).fonte
-c
.-k
opção? Não foi possível encontrá-lo nas páginas de manual, por exemplo, nesta versão aqui linux.die.net/man/1/gzip . Além disso, parece que o gzip copia os metadados do arquivo por padrão.Observe que o lançamento recente (junho de 2013) "aceita a opção --keep (-k), para consistência com ferramentas como xz, lzip e bzip2. Com essa opção, o gzip não remove mais os arquivos de entrada nomeados ao compactar ou descompactar" .
gzip-1.6
Trecho da página de manual:
Portanto, a partir de
1.6
, você pode usar-k
ou--keep
manter o arquivo original:(observe que ele não funciona se
$file
is-
(quegzip
interpreta como stdin em vez do arquivo real chamado-
); nesse caso, você deve alterá-lo para./-
)Essa opção foi introduzida pela primeira vez na implementação do
gzip
FreeBSD (no FreeBSD 7.0 em 2007) para fins de consistênciabzip2
. Issogzip
é baseado na reescrita do GNUgzip
pelo NetBSD. A-k
opção acabou retornando ao NetBSD em 2010 .fonte
A partir da documentação, parece que não há opção para criar uma cópia do arquivo.
Você pode definir uma função shell
e depois
fonte
-
, você deve chamá-lo comogzipkeep ./-
.