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

Convert timestamp string to UTC date in bash

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

DataExport.test_20181029183500_300.csv.gz

由于某种原因我无法在文件源本身修复它,所以我必须稍后执行更改。

目前我提取的号码如下:

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

但是现在卡在这里了,怎么继续。

谢谢你和最好的问候

将此作为代码的延续进行检查

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

将输出:

1540809300

然后您可以使用该行的输出来执行文件重命名。但我建议,如果只创建一个函数或一个实际的脚本就很复杂。

这里有一个快速函数可以做到这一点:

function rename_ts() {

    filename=""
    time_stamp=$(echo "$filename" | cut -d'_' -f2)
    date_fmt=$(echo "$time_stamp" | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/-- ::/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