A opção date
+
define apenas o formato saída , não a entrada. Você precisará usar uma ferramenta diferente ou formatar a string primeiro:
date --date="$(sed 's/^\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9][0-9][0-9]\)$/--/' <<< '10042015')"
ou
date --date="$(sed 's/\(..\)\(..\)\(....\)/--/' <<< '10042015')"
ou simplesmente
date --date="$(sed 's/\(.*\)\(....\)$//' <<< '10042015')"
(obrigado @Costas ). Mesmo que os dois últimos sejam mais curtos, ainda sugiro o primeiro, porque:
- é mais rigoroso, evitando bugs estranhos ao lidar com strings de ferramentas ou usuários de terceiros e, mais importante,
- é mais fácil de manter, pois é mais óbvio o que o código está fazendo (reorganizando três números e colocando hífens entre eles, em vez de mover os quatro últimos caracteres para o início da sequência).