Estou prestes a compactar um diretório grande e quero saber exatamente qual será o tamanho do arquivo resultante.
Eu tentei usar du
:
$ tar -cv dir | du -h -
du: cannot access '-': No such file or directory
Então tentei usar a versão do arquivo '-':
$ tar -cv dir | du -h /dev/stdin
1.0K
Estou certo de que esse número não é exato. Como posso obter o tamanho de stdin?
wc
o supérfluo-
, também não precisará docut
comando subsequente .Com o GNU
tar
você pode apenas fazer:... que renderizará saída como ...
... no stderr. Da mesma forma, com qualquer tar (ou fluxo) você pode usar
dd
para entregar um relatório sobre a contagem de bytes. Isso pode ou não ser preferívelwc
, mas odd
padrão é um tamanho de bloco de 512 bytes - que é idêntico aotar
tamanho do bloco. Se o PIPE_BUF do seu sistema for grande o suficiente, você poderá expandirdd
o tamanho do bloco para corresponder aotar
tamanho do registro - que é 20 blocos ou 10240 bytes. Como isso:Isso pode ou não oferecer uma solução com melhor desempenho do que
wc
.Nos casos de uso
dd
e detar
uso, você não precisa realmente se desfazer do fluxo. Eu redirecionei para o/dev/null
acima - mas eu poderia tê-lo redirecionado com facilidade para algum arquivo e ainda receber o relatório em seu tamanho no momento em que foi gravado.fonte
dd
(comparado awc
).dd
a saída seja repassada - para um compressor, digamos - e por qualquer motivo que você deseje conhecer o tamanho bruto do arquivo e o compactado. Também é útil obter um relatório instantâneo sobre a contagem de registros -tar
não é apenas um arquivo, mas um formato de fluxo. Pode ser usado de outras maneiras além de salvar em um grupo de arquivos em outro arquivo. Geralmente é útil para bloquear um fluxo antes de modificá-lo. Em cada um desses limites de registro há um bloco inteiro de NULs.Eu sugiro:
Um simples
c
(nenhum avanço-
é necessário) é usado para criar umtar
arquivo morto,f
especifica um arquivo de saída e-
indica que ele é stdout . (Note que se você quiser apenas o tamanho e há muitos arquivos abaixo dir você pode sim omitirtar
'sv
por motivos de desempenho.)fonte
tar
s no passado em que era necessário especificar um arquivo tar (assimf
e-
). - Apenas procurei; semf
-
otar
assumido/etc/mt0
como padrão./etc/mt0
realmente significa - "fita magnética" ;-) Eu ficaria interessado em saber como o Solaristar
se comporta (porque o Solaris é um dos sistemas operacionais contemporâneos conhecidos por ainda possuir coisas realmente antigas/bin
).-f
bandeira paratar
?O texto da sua pergunta se presta às
tar ... | wc -c
respostas acima. Originalmente, li sua pergunta com a suposição silenciosa de que você queria que o tamanho fosse relatado enquanto criava o arquivo tar (talvez a saída do tar estivesse sendo canalizada por um link de rede?).Nesse caso, eu sugiro
pv
- visualizador de tubos. Eu já vi referências a ele, mas ainda não tive a chance de brincar com ele.Referências
fonte