Преобразовать строку метки времени в дату UTC в bash - PullRequest
0 голосов
/ 29 октября 2018

Я хотел бы переименовать мои файлы с меткой времени UTC. В настоящее время эти файлы являются именами, основанными на местном времени (CET), как показано ниже, где первый номер, если отметка времени:

DataExport.test_20181029183500_300.csv.gz

По какой-то причине я не могу это исправить в самом источнике файлов, поэтому мне придется внести изменения позже.

В настоящее время я извлек номер со следующим:

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

Но теперь я застрял здесь, как продолжить.

Спасибо и всего наилучшего

1 Ответ

0 голосов
/ 29 октября 2018

Отметьте это как продолжение вашего кода

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

...