Поиск файла в нескольких каталогах в bash - PullRequest
0 голосов
/ 04 марта 2020

У меня есть такая структура:

basedir -> 187382 -> name1 -> name1.keytab
basedir -> 049328 -> name2 -> name2.keytab
basedir -> 233432 -> name3 -> name3.keytab
basedir -> 234343 -> name4 -> name4.keytab
...

Числа разные, и я их не знаю.

В bash Сценарий, который я хочу сказать:

export X="basedir/*/$name/$name.keytab"

Что я должен написать вместо звезды? Или, если такой символ не существует ... как я могу найти $ name.keytab в каждой папке в basedir?

1 Ответ

1 голос
/ 04 марта 2020

Разверните ваш глобус в массив , а не в строковую переменную, оставив * без кавычек:

#!/usr/bin/env bash
[[ $BASH_VERSION ]] || { echo "ERROR: Shell is not bash" >&2; exit 1; }
shopt -s nullglob  # allow a glob to expand to an empty list if nothing matches

keytabs=( "basedir/"*"/$name/$name.keytab" )
case ${#keytabs[@]} in
  0) echo "ERROR: no keytab found for $name" >&2; exit 1;;
  1) true;;
  *) echo "ERROR: ${#keytabs[@]} keytabs found for $name; expected only one" >&2; exit 1;;
esac

# assign the first/only keytab we matched to an exported string variable.
X=${keytabs[0]}; export X

# for debugging purposes, print the definition of X so it's visible that we exported it
declare -p X >&2
...