Извлечь самый высокий день из даты метки времени в имени файла

filename имеет структуру name $ timestamp.extension где:

timestamp=`date "+%Y%m%d-%H%M%S"`

Итак, если в каталоге есть следующие файлы:

name161214-082211.gz
name161202-082211.gz
name161220-082211.gz
name161203-082211.gz
name161201-082211.gz

При выполнении кода / скрипта из вашего ответа значение 20 следует сохранить в переменной high_day

highest_day = 20
-1
06.02.2018, 04:58
2 ответа

Без использования временных меток файлов это становится немного неуклюжим, но это можно сделать следующим образом:

#!/usr/bin/env bash

re="name([0-9]{6})-([0-9]{6})\.gz"
re2="([0-9]{2})([0-9]{2})([0-9]{2})"

for file in *.gz
do
    if [[ "$file" =~ $re ]]
    then
        # BASH_REMATCH[n] on filename where n:
        # [1] is date ie. 161202
        # [2] is time ie. 082211
        date=${BASH_REMATCH[1]}

        # BASH_REMATCH[n] on date string where n:
        # [1] is year ie. 16
        # [2] is month ie. 12
        # [3] is day ie. 02
        [[ $date =~ $re2 ]] && day=${BASH_REMATCH[3]}

        # Keep max day value
        [[ $day > $highest_day ]] && highest_day=$day
    fi
done

echo $highest_day
0
28.01.2020, 05:13

вы можете сделать вот так ..

highest_day= $(for i in *.gz; do echo ${i:8:2}; done | sort -n | tail -1)
0
28.01.2020, 05:13

Теги

Похожие вопросы