Я задал этот вопрос вчера с Linux, но понял, что мне нужно, чтобы он работал как в Linux, так и в OS X. Ссылка на предыдущий вопрос: Получить папку с наибольшим номером в конце имени в Linux.

У меня есть несколько папок r1, r2, r3 и т.д., И я хочу получить имя папки с наибольшим номером в конце. Как я могу получить имя?

Решение ls -v выглядит многообещающе, но я хочу исключить все папки, которые не следуют шаблону r [0-9] *

3 ответа3

2

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

$ ls | grep '^r[0-9]\+$' | cut -c2- | sort -n | tail -n1 | sed 's|^|r|'
  • Список файлов
  • используйте только те, чьи имена в точности соответствуют r[0-9]+ , т. е. за r следует любая последовательность цифр
  • удалить первый символ, то есть r оставив только номер
  • Сортировать по числовому значению
  • получить последнее (самое высокое) значение
  • предварять такой r

Пример:

$ ls
bar baz foo qux r14 r23 r36 r4 r41 r6 r9 rar raz roo
$ ls | grep '^r[0-9]\+$' | cut -c2- | sort -n | tail -n1 | sed 's|^|r|'
r41
1

Вы всегда можете установить последнюю версию GNU coreutils , чтобы иметь параметр --version-sort . Два шага (это занимает одну или две минуты):

1) Установить Homebrew

Самый простой способ - установить Homebrew, который является своего рода диспетчером пакетов для OS X и помогает вам легко устанавливать двоичные файлы:

ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

Чтобы получить последнюю версию sort , установите GNU Coreutils:

brew install coreutils

2) Тогда используйте gsort

Теперь у вас будет sort версия, которая имеет больше возможностей. Это будет доступно в gsort . Теперь просто запустите команду из другого вопроса, но вместо этого с помощью gsort .

printf '%s\n' r[0-9]* | gsort --version-sort | tail -n 1

Результаты

Я только что проверил это на 10.6, работает нормально:

charon:Desktop user$ mkdir r1 r2 r3
charon:Desktop user$ printf '%s\n' r[0-9]* | gsort --version-sort | tail -n 1
r3
0

Выглядит следующее должно работать ls | grep r.*[0-9] | tail -n 1 . Единственное условие - чтобы эта команда показывала имя файла с самым длинным номером, каталоги 1-9 должны иметь префикс 0.

Например, если у вас есть r1, r2, r3, r1287364763874 и вы запустите эту команду, вы получите r3 в качестве вывода. Но если нижние каталоги помечены как r01, r02, r03, r18646483, результатом команды будет r18646483.

Надеюсь, это поможет.

Протестировано на Mac OS 10.5

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .