tar
é capaz de anexar arquivos já existentes, então você pode fazer:
touch tarfile.tar
command_that_produces_file_list | xargs tar rf tarfile.tar
Infelizmente, isso não funciona com a compactação imediata. Felizmente, o formato tar
é simples o suficiente, podemos fazer alguns hackers:
command_that_produces_file_list | {
xargs -i sh -c 'tar c {} | head -c $(( ('stat --printf="%s" {}' + 511) / 512 * 512 + 512))';
dd if=/dev/zero bs=512 count=2 2>/dev/null;
} | compression_utility
tar
output consiste em, para cada arquivo, um cabeçalho de 512 bytes seguido por blocos de 512 bytes suficientes para conter os dados do arquivo. Em seguida, anexa pelo menos 2 blocos de 512 bytes de zeros. O que esse código faz é capturar a saída do tar e remover os blocos extras de zeros, combinar a saída das várias invocações de tar
juntos e, em seguida, fixar os blocos de zeros de finalização. A saída é enviada pelo pipe para o utilitário de compactação, que é executado simultaneamente com o tar
s.