Geralmente, pode ser feito um achado para fazer o que você quer usando exec em vez de enviar a saída para outros programas.
find "$somePath" -iname "*.png" -printf '%p => %s\n'
Se você realmente precisa de tamanhos compatíveis com humanos, é um pouco mais complicado:
find "$somePath" -iname "*.png" -exec printf '{} => ' \; -exec sh -c 'ls -sh "{}" | cut -f1 -d\ ' \;
Observe que o último está analisando ls
, mas, até onde eu sei, é impossível que um espaço apareça na primeira coluna; já que estamos apenas pegando a primeira coluna aqui, e porque estamos operando com uma única entrada de cada vez (não uma lista), tudo bem. Caso contrário, você pode usar algum outro programa para mostrar o tamanho. No BSD e no Linux, você pode usar stat
; no Solaris, você pode ter que escrever seu próprio programa para gerar apenas o tamanho de um arquivo.
A parte importante é que você sempre pode usar find
para executar o que quiser, passando nomes completos de arquivos - desta forma você não está tentando extrair nomes de arquivos de uma lista que não faz. t tem bons delimitadores.