Estou procurando uma maneira de atualizar milhares de arquivos .tbz, por isso farei isso com um script de shell. Eu preciso adicionar um arquivo para cada um.
Minha pergunta é: existe uma maneira mais rápida de fazer isso sem extrair o conteúdo de cada tbz e depois comprimir novamente com o novo arquivo incluído no tar contido? Como seriam os comandos?
obrigado
linux
shell-script
shell
command-line
tar
BottleZero
fonte
fonte
Respostas:
Embora
tar
possa adicionar arquivos a um arquivo morto já existente, ele não pode ser compactado. Você terá quebunzip2
arquivar compactado, deixando um tarball padrão. Você pode usartar
a capacidade de adicionar arquivos a um arquivo existente e, em seguida, recomprimir combzip2
.Do manual:
fonte
A outra resposta está correta: você não pode atualizar corretamente um arquivo tar compactado sem descompactá-lo. A documentação tar do GNU sugere e a tentativa de atualização falha com uma mensagem de erro explícita:
No entanto, se você estiver interessado em uma solução de trabalhos sujos que não exija descompressão, eu posso fornecer uma, com base nas seguintes observações:
cat
é suportada e produz um fluxo bzip2 válido (o mesmo ocorre com o gzip);cat
não produz um arquivo tar válido, razão pela qual a--concatenate
opção existe, mas podemos pedir ao tar para fingir que é válido:Com base nesse conhecimento, podemos fazer, por exemplo:
Isso resulta, como o snippet de documentação acima explica, em um arquivo tar inválido, mas usando
--ignore-zeros
, ele ainda pode ser lido completamente:Observe como o acima lista todos os três arquivos dos dois arquivos originais, enquanto a omissão
-i
(corretamente) lista apenas os arquivos do primeiro arquivo original:Mais uma vez, isso não passa de um truque sujo, mas pode ser útil se você controlar os lados de escrita e leitura e garantir que
-i
será usado ao tentar ler os arquivos criados dessa maneira.fonte
i
linha de comando verão a coisa toda.