Я помещаю ответ здесь, не анализируя вывод ls
, потому что это непереносимая плохая практика.
См .: https://unix.stackexchange.com/q/128985/310674
printf '%s\n' *.json* \
| sort --reverse --version-sort \
| head --lines=1
printf '%s\n' *.json*
: создает поток всех файлов, разделенных новой строкой, соответствующих шаблону *.json*
. Это переносимо и гораздо более надежно, чем синтаксический анализ выходных данных ls
. sort --reverse --version-sort
: сортирует строки потока в обратном порядке с правилами сортировки номеров версий. Это поместит самую высокую версию в первую строку. head --lines=1
: печатает первую строку потока. Здесь он запрещает чтение всего потока до последней строки, поскольку он останавливается на первой строке.
Если вы используете версию утилит GNU, вы можете обработать null
с разделителями список, а не newline
список с разделителями. Это позволит обрабатывать имена файлов, которые могут содержать spaces
, newlines
или другие непечатаемые символы.
printf '%s\0' *.json* \
| sort --reverse --version-sort --zero-terminated \
| head --lines=1 --zero-terminated