Выбрать самый старый файл на основе даты в названии файла - PullRequest
2 голосов
/ 06 июня 2019

Я застрял в одной ситуации, когда у меня куча файлов, и мне нужно выбрать самую старую на основе времени, присутствующего только в имени. Не на основе отметки времени, поскольку я выполняю SCP из одной системы в другую, поэтому отметка времени будет одинаковой для всех файлов после запуска SCP

У меня есть файлы типа

  1. UAT-2019-03-21-16-31.csv
  2. UAT-2019-03-21-17-01.csv
  3. AIT-2019-03-21-17-01.csv

Здесь 2019 представляет год, 03 месяц, 21 день, 16 часов в 24-часовом формате и 31 - минуты.

Сначала мне нужно выбрать файл UAT-2019-03-21-16-31.csv из указанных выше файлов. Как я могу сделать в сценариях оболочки.

Я попытался сделать ls -1, но он будет отсортирован по алфавиту, это означает, что сначала будет выбран AIT-2019-03-21-17-01.csv, но мне нужно в соответствии со временем, указанным в имени файла

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Вы можете попробовать это

ls -1 | sort -t"-" -k2 -k3 -k4 -k5 -k6 | head -n1

Выход:

UAT-2019-03-21-16-31.csv

Любопытно ответить на вопрос об альтернативах, поскольку я знаю, что синтаксический анализ вывода ls не идеален.

0 голосов
/ 06 июня 2019

Лучший и эффективный способ сделать это - преобразовать временную метку имени файла в время эпохи и найти самую старую среди них.

Вам необходимо написать скрипт, который выполняет ниже порядок:

  1. Получить все метки времени имени файла в переменную.
  2. Конвертировать все метки времени имени файла в время эпохи.
  3. Найти самое старое и получить имя файла.

Команда для преобразования временной метки имени файла в время эпохи будет

date -d"2019-03-21T17:01" +%s
date -d"YYYY-MM-DDTHH:MM" +%s

Вы можете попробовать эти шаги в сценарии

Надеюсь, что это поможет вам начать писать сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...