将时间戳字符串转换为bash中的UTC日期

时间:2018-10-29 17:14:06

标签: bash date timestamp utc

我想用UTC时间戳重命名我的文件。当前,这些文件是基于本地时间(CET)的名称,如下所示,其中第一个数字是时间戳:

DataExport.test_20181029183500_300.csv.gz

由于某种原因,我无法在文件源本身上解决此问题,因此以后必须进行更改。

目前,我提取的号码如下:

echo "DataExport.test_20181029183500_300.csv.gz" | cut -d"_" -f2- | cut -c1-14

但是现在我被困在这里,如何继续。

感谢您和最诚挚的问候

1 个答案:

答案 0 :(得分:1)

将此作为您代码的延续

date -d "$( echo "DataExport.test_20181029183500_300.csv.gz" | cut -d'_' -f2 | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3 \4:\5:\6/g' )" +%s

哪个会输出:

1540809300

然后,您可以使用该行的输出来重命名文件。但是我建议为这个问题创建一个函数或一个实际脚本是否变得复杂。

这是一个快速的功能,可以做到这一点:

function rename_ts() {

    filename="$1"
    time_stamp=$(echo "$filename" | cut -d'_' -f2)
    date_fmt=$(echo "$time_stamp" | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3 \4:\5:\6/g')
    utc=$(date -d "$date_fmt" +%s)

    mv $filename $(echo "$filename" | sed "s/$time_stamp/$utc/g")

}

例如rename_ts DataExport.test_20181029183500_300.csv.gz