somecommand | dd bs=1K count=2 iflag=fullblock > somefile
Isso gravará exatamente 2 KiB no arquivo (menos se somecommand
terminar primeiro). iflag=fullblock
não é requerido pelo POSIX, o dd
pode não suportar, o comando contendo iflag=fullblock
não é portável. Compare este cenário para ver por que isso pode ser importante.
Depois de processar o número correto de blocos ( count=2
no exemplo acima) dd
termina, isso interrompe o pipe. Cabe a somecommand
como ele reage a um cano quebrado. Veja isto: O que faz um processo Unix morrer com cano quebrado?
Se a quantidade de bytes que você deseja manter obriga você a usar alguns inconvenientes bs
e / ou count
, considere isto:
somecommand | { dd bs=1M count=1024 iflag=fullblock; dd bs=10 count=1 iflag=fullblock; } > somefile
O comando gravará 1 GiB (= 1024 MiB) mais 10 bytes.
Algumas implementações de head
permitem que você use a opção -c
para obter um número arbitrário de bytes. Isso também não é portátil, a opção não é exigida pelo POSIX.
De acordo com esta resposta dd
com um tamanho de bloco de entrada de 1 ( ibs=1
) é a somente a maneira POSIX de ler um número exato de bytes.
Se somecommand
gerar saída textual e você quiser limitar o número de linhas no arquivo, head
é a ferramenta certa. Isso salvará as primeiras 5 linhas somente (novamente, menos se somecommand
terminar primeiro):
somecommand | head -n 5 > somefile
A opção -n
de head
é exigida pelo POSIX.