Não parece date
suporta uma cadeia de formato de entrada. Como tal, você não poderá simplesmente prosseguir e passar a string até a data. A página man afirma que aceita os formatos usuais, então talvez sua configuração de localidade possa influenciar isso, mas não tenho certeza disso.
Ainda mais, vamos dar uma olhada no seu script:
#!/bin/bash
sec=$(TZ="UTC" date +'%s' -d "$1")
$(TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S")
O que acontece aqui é que você converte o parâmetro $1
em um registro de data e hora do Linux e, em seguida, converte-o novamente em uma string desejada. Uma abordagem possível para fazer isso funcionar com sua entrada seria reformatar o parâmetro $1
string.
Você poderia fazer isso como um exemplo usando sed
com uma expressão regular adequada. Tenha em atenção que deve certificar-se de que tem uma cadeia válida de antemão e de que quaisquer alterações de formato podem violar esta situação.
#!/bin/bash
intputdate=$(echo $1 | sed -re 's/([0-9]{2})\.([0-9]{2})\.([0-9]{4})/--/')
sec=$(TZ="UTC" date +'%s' -d "$intputdate")
echo $(TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S")
Editar: não ter os nomes das variáveis erradas certamente ajuda.