Сравните суффиксы нескольких файлов, содержащие дату и время, и выполните действие с самыми последними

dracut -crypt -ssh — это модуль dracut, который запускает ssh-сервер dropbear во время initramfs, поэтому вы можете войти по ssh, чтобы ввести парольную фразу и расшифровать корневую файловую систему. Я использую это на ряде серверов, разбросанных по всей планете, к которым у меня нет доступа к консоли, и это работает довольно хорошо.

0
22.07.2020, 19:23
2 ответа

some_command_that_takes_this_file_as_argument $(find. -iname "logA.log.$(date +%m%d%Y).[0-9]*" 2> /dev/null | sort -n | tail -1)должно помочь

Редактировать:Если вы просто хотите использовать новейший файл журнала, вы можете сделать это еще проще:
some_command_that_takes_this_file_as_argument $(ls -rt | grep ^logA.log. | tail -1)

0
18.03.2021, 23:18

Можно просто:

set -- logA.log."$(date +%m%d%Y)".*
eval "latest=\${$#}"

(или shift "$(($# - 1))"; latest=$1, если у вас есть религиозные возражения против использования eval, хотя конкретное использование evalсовершенно безопасно ).

Поскольку расширения glob сортируются лексически, учитывая ваш формат HHMMSS, последнее в этом списке будет самым последним.

Сzsh:

(){latest=$argv[-1];} logA.log.${(%):-%D{%m%d%Y}}.*

Или:

(){latest=$1;} logA.log.${(%):-%D{%m%d%Y}}.*([-1])

${(%):-%D{%m%d%Y}}использует флаг расширения параметра %для расширения %D{%m%d%Y}в качестве подсказки. Конечно, вы можете заменить его на "$(date +%m%d%Y)", чтобы сделать его более разборчивым, хотя это потребует создания дополнительного процесса и выполнения отдельной утилиты.

В качестве альтернативы вы можете использовать встроенную команду strftime(zshв модуле zsh/datetime)как strftime -s today %m%d%Yдля заполнения переменной $todayэтой отметкой времени.

1
18.03.2021, 23:18

Теги

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