Even if I separate the files with
%bl0ck_qu0te%4
before sending them tostdout
...
Ainda bem que você pode modificar o procedimento de envio. Minha solução é a seguinte:
for f in *.jpg; do echo S; base64 "$f"; echo ""; done |
# the above is just an example sending process
while read dummy; do
sed -u '/^$/q' | base64 -d | identify -
done
Esclarecimento:
- O "bloco de arquivo" único começa com uma linha descartável ("S" neste caso) que não transporta dados. Se
read
não conseguir encontrar uma linha, o comando inteiro será finalizado. -
sed
passa os dados para o decodificador até que haja uma linha vazia (nota: a linha vazia adicional não altera a saída debase64 -d
). - É crucial usar
sed
(-u
flag) sem buffer; caso contrário, umsed
poderia ler muito e, eventualmente, descartar o que considera excesso de dados; então o próximosed
(consequentemente, o próximoidentify
) não receberia todos os dados que deveria.
Dicas:
- A linha extra pode conter metadados em vez de "S", como um nome de arquivo ou algo assim (mas cuidado com as novas linhas nos nomes, etc.).
- Como
base64
produz uma saída maior do que sua entrada, convém usargzip
em ambos os lados, especialmente se seu fluxo viaja pela Internet.