Isso lhe dará a data em segundos (desde a época do UNIX)
date --date '2017-08-17 04:00:01' +%s # "1502938801"
E isso lhe dará a data como uma string legível de um número de segundos
date --date '@1502938801' # "17 Aug 2017 04:00:01"
Portanto, tudo o que é necessário é converter sua data / registro de data e hora em um formato que o GNU date
possa entender, usar a matemática para determinar a diferença e gerar o resultado
datetime1=20170817040001
datetime2=20160312000101
seconds1=$(date --date "$(echo "$datetime1" | sed -nr 's/(....)(..)(..)(..)(..)(..)/-- ::/p')" +%s)
seconds2=$(date --date "$(echo "$datetime2" | sed -nr 's/(....)(..)(..)(..)(..)(..)/-- ::/p')" +%s)
delta=$((seconds1 - seconds2))
echo "$delta seconds" # "45197940 seconds"
Não fornecemos informações de fuso horário aqui para que ele assuma o fuso horário local. Seus valores para os segundos do datetime provavelmente serão diferentes dos meus. (Se seus valores forem UTC, você poderá usar date --utc
.)