Предполагая, что имена каталогов отсортированы правильно (т. е. они содержат одинаковое количество цифр и в каталоге нет нечисловых имен):
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
.
Вам, вероятно, следует перебрать все аргументы и проверить каждый, и если вас устраивает один тест для обеих вещей, вы можете сделать что-то вроде следующего: что гарантирует, что все аргументы будут содержать только цифры (то есть не -
или буквы, но также не десятичные числа)
pattern='[^0-9]'
for arg; do
if [[ $arg =~ $pattern ]]; then
printf 'Unacceptable option: %s\n' "$arg"
exit 3
fi
done
, если вы хотите, чтобы отдельные тесты имели разные сообщения об ошибках и коды выхода, вы можете сделать эти внутри цикла for
и теста arg
, который получит каждый параметр командной строки по очереди
Вы также можете воспользоваться такими операторами сравнения bash:
if [ $arg -eq $arg -a $arg -ge 0 ] 2>/dev/null ;then
echo "accepted"
else
echo "not accepted"
fi
Хитрость в том, что если вы сравните с -eq два нечисловых аргумента, bash вызовет ошибку (которую мы отправили в / dev / null).