Как отсортировать вывод s3cmd ls по дате?

Вывод задания cron не попадает в оболочку. Чаще всего выходные данные, записываемые в его стандартный вывод, и стандартные потоки ошибок собираются и отправляются по почте владельцу cronjob.

Запись вывода в файл:

@reboot /home/admin/scripts/connection.sh >>/home/admin/connection.log 2>&1

Это приведет к тому, что все выходные данные скрипта будут добавлены в файл /home/admin/connection.log.

3
11.04.2020, 02:04
2 ответа
... |
awk -F'[/_]' '{printf "%04d%02d%02d %s\n", $(NF-1), index("  JanFebMarAprMayJunJulAugSepOctNovDec",$(NF-2))/3, $(NF-3), $0}' |
sort |
sed 's/[0-9]* //'

Обратите внимание, что 2 пробелов в " Jan..."; это не ошибка :индексы в awk начинаются с 1, а не с 0, как в других языках.

4
19.03.2021, 02:30

Альтернатива GNU awkс использованиемdate

awk -F'[/_]' '{
    D=$(NF-3)"-"$(NF-2)"-"$(NF-1);
    "date +%Y-%m-%d -d "D|getline nd;
    print nd, $0
}' file1 | sort | cut -d" " -f 2

Прохождение

Разделите $0ваши поля на /или_

awk -F'[/_]' '{

Перекомпоновать их как действительную дату

    D=$(NF-3)"-"$(NF-2)"-"$(NF-1);

Используйте функцию оболочки date, чтобы преобразовать месяц из текста в число и получить его обратно, передав awkgetlineв новую переменную

    "date +%Y-%m-%d -d "D|getline nd;

Здесь ничего нового

    print nd, $0
}' file1 | sort | cut -d" " -f 2

Выход

s3://xyz/private/backups/mails/daily/30_Mar_2020/
s3://xyz/private/backups/mails/daily/31_Mar_2020/
s3://xyz/private/backups/mails/daily/01_Apr_2020/
s3://xyz/private/backups/mails/daily/02_Apr_2020/
s3://xyz/private/backups/mails/daily/03_Apr_2020/

Альтернативный вариант немного компактнее с использованиемgensub

awk -F'/' '{
    "date +%Y%m%d -d "gensub("_","-","g",$(NF-1))|getline nd;
    print nd, $0
}' file1 | sort | cut -d" " -f2
2
19.03.2021, 02:30

Теги

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