Context
У меня есть команда ls
, которая выдает мне список папок basename
s следующим образом:
INPUT:
bash$ ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename
OUTPUT:
4750070-190311-0913-3603182
4761979-190319-SHELVE-3617880
4763232-190319-2049-3618496
4763232-190320-SHELVE-3619115
4764259-190320-1402-3619606
4764259-190320-cifx-6274238
4764339-190320-2049-3620637
4764339-190320-SHELVE-3620115
4764339-190320-cifx-6274274
Эти папки упорядочены из самых старых (сначаларезультат) до самого нового (последний результат).
У меня есть логика, которая начинается с проверки самого нового: если это хорошо (я делаю некоторые проверки содержимого папки), я хочу сохранить его, иначе я хочу проанализировать второй более новый (и так далее).
Для того, чтобы сделать это, я начинаю с получения tail -1
:
SETUPS_CONTROL=1
MY_SETUP=$(ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | tail -${SETUPS_CONTROL})
... doing some stuff to check
... и, если это окажется не очень хорошим, я увеличиваю SETUPS_CONTROL
и получаюснова MY_SETUP
, на этот раз с +1
хвостом.
Вопрос
Я бы хотел сохранить ту же логику, но с возможностью отфильтровывать уже в моей команде ls
все папки, которые не сделаны изтолько числа.Например:
- Папка
4750070-190311-0913-3603182
будет полезна для меня, потому что это только цифры и тире - Папка
4761979-190319-SHELVE-3617880
не будет полезной для меня, потому что она содержитслово (SHELVE
), и оно состоит не только из цифр и тире.
В настоящее время, когда я применяю свой цикл, чтобы определить, хорош ли он, я вынужден делать регулярные выражения для каждого полученного результата, чтобы определить, хорош он или нет:
if [[ ${MY_SETUP} =~ "^[0-9-]+$" ]]
then
#my setup might be good
else
#my setup is not good already, no need to further my checks
fi
Это работает нормально, но мне было интересно, не смогу ли я отфильтровать список непосредственно в моей ls
команде вместо того, чтобы что-то получить, и мне пришлось зацикливаться, чтобы понять, хорошо это или нет.
Моя попытка
Я пытался передать grep "my regex expression"
в команду:
ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | grep "^[0-9-]+$"
... но он возвращает пустой результат.То же самое с одинарной цитатой:
ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | grep '^[0-9-]+$'
Кто-нибудь может помочь?