Если у меня есть список путей, разделенных двоеточиями, очень похоже на $ PATH, но не обязательно на $ PATH.
Я хочу найти в этом списке определенное имя файла. Тем не менее, я хочу только первый соответствующий путь.
Я рассмотрел следующие команды Linux:
which
: работает только для двоичного файла и работает только с переменной $ PATHwhereis
: работает с определенными типами файлов и работает только с переменной $ PATHfind
: не поддерживает разделенные двоеточиями списки путей и возвращает несколько результатов
Вот несколько вещей, которые я пробовал:
Я попытался использовать
whereis
по следующей стратегииenv WHEREIS="`which whereis`" PATH="$MY_PATH_LIST" $WHEREIS "$TARGET_FILE"
и это почти работает. Однако, по-видимому, он не возвращает результаты для файлов произвольного типа. Он также возвращает несколько результатов, и в неудобном формате.
Я мог бы
which
чтобы работать поenv WHICH="`which which`" PATH="$MY_PATH_LIST" $WHICH "$MY_TARGET_FILE"
если была опция командной строки, чтобы заставить ее разрешать неисполняемые файлы.
Затем я попытался решить проблему с
find
. Сначала я использовал регулярные выражения для расширения списка путей (я заменяю двоеточия пробелами). Затем я вызываю поиск, и он работает правильно. Тем не менее, он ищет все пути. Я не могу найти способ сказать ему, чтобы он прекратил поиск рано, если он найдет хороший результат.Я получил это на работу
find ${MY_PATH_LIST//[:]/ } -name "$MY_TARGET_FILE" | head -n 1
но это займет много времени, потому что
find
все еще выполняет исчерпывающий поиск.Мне нужно, чтобы это выполнялось быстрее (выход при первом результате), потому что это будет выполняться много раз с другими параметрами.
У кого-нибудь есть лучшее решение, чтобы предложить?
Обратите внимание, что если все не удается, я могу написать решение не Bash. Напишите сейчас, я надеюсь на простое решение с использованием существующих инструментов.