Как получить папку с наибольшим номером

Это ищет строки, начинающиеся с int или unsigned int , для которых оператор заканчивается на ; и не содержит = :

$ egrep '^(unsigned )?int [^=]*;' myfile.txt
int x;
int dftr2;
unsigned int dftrxe2;

Обратите внимание, что это также работает с комментариями и правильно игнорирует любые = в комментарии. Рассмотрим этот тестовый файл:

$ cat myfile2.txt
int y; // y=height
int z=1; // z is depth

Это результат:

$ egrep '^(unsigned )?int [^=]*;' myfile2.txt
int y; // y=height

Наконец, обратите внимание, что egrep устарел. grep -E предпочтительнее:

grep -E '^(unsigned )?int [^=]*;' myfile.txt
2
08.05.2017, 01:09
4 ответа

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

$ mkdir -p parentdir/{1,2,6,3}
$ A=(parentdir/*)              # fill an array with the names
$ echo "${A[-1]}"              # print the last member of the array
parentdir/6
$ echo "${A[-1]##*/}"          # remove everything up to last / 
6

. Но если они имеют разное количество цифр, это не сработает (порядок будет 1, 13, 2, ...). Итак, давайте найдем максимум вручную:

$ mkdir -p parentdir/{1,2,6,3,13}
$ max=0;                       # assuming they're non-negative integers!
$ for x in parentdir/* ; do 
    n=${x##*/};                # take just the number so that comparisons work 
    [ "$n" -gt "$max" ] && max=$n 
  done
$ echo "$max" 
13

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

2
27.01.2020, 21:51

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

NEWEST=(/user/mosawi/parentdir/*(/om[1]))
NEWESR=${NEWEST}/payload.gzip

Фокус в том, чтобы использовать квалификаторы glob для сортировки (o) каталогов (/) при изменении time (m) и получить только первый ([1]).

4
27.01.2020, 21:51

Предполагая, что имена каталогов отсортированы правильно (т. е. они содержат одинаковое количество цифр и в каталоге нет нечисловых имен):

newest="$(printf '%s\n' /user/mosawi/parentdir/* | tail -n 1)"

Файл будет " $newest/payload.gzip".

Еще один трюк заключается в создании символической ссылки на последний каталог всякий раз, когда создается новый каталог:

mkdir "parentdir/$i" && ln -sf "parentdir/$i" parentdir/latest

Тогда легко получить доступ к parentdir/latest/payload.gzip.

1
27.01.2020, 21:51

mkdir -p parentdir/{1,2,6,3,13}

просто ls, без сортировки:

ls parentdir/
1  13  2  3  6

теперь сортируем:

ls parentdir/ -v
1  2  3  6  13

Теперь сортируем и берем последнее:

ls parentdir/ -v | tail -n1
13

Плюсы: нет циклов, однострочник

Минусы: вызов внешней команды

2
27.01.2020, 21:51

Теги

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