Как найти все каталоги в каталоге, начинающиеся с определенного префикса?

#bash #shell

#bash #оболочка

Вопрос:

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

 array directories = find('/etc/build', 'project-build-*');
foreach (string directory in directories)
{
    // directory == 'project-build-example-x64'
    do_something_with('/etc/build/'   directory   '/Makefile');
}
 

Ответ №1:

 for dir in "/etc/build/project-build-"*/
do
  do_something_with "$dir"Makefile
done
 

Комментарии:

1. Вау, это действительно интуитивно понятно! Спасибо.

2. В качестве продолжения это все равно выполняется один раз с самим шаблоном, если совпадений нет… как бы мне это исправить?

3. Установите nullglob параметр. shopt -s nullglob

4. Что приведет к тому, что цикл вообще не будет выполняться, если совпадений нет, правильно?

Ответ №2:

Вот альтернатива с find и xargs

 find /etc/build/project-build-*/ -maxdepth 1 -name Makefile | xargs do_something