Как найти директорию в которой отсутствует определенный файл?

Рейтинг: 1Ответов: 2Опубликовано: 22.05.2023

В файловой системе в директории <some_dir> лежит три папки, их имена 'clone1', 'clone2', 'clone3'. Их содержимое идентично. Почему так: имеется программный комплекс (расчеты CPU), для работы программного комплекса нужны файлы из одной из директорий clone.

Хочу запускать программный комплекс в batch режиме, для того, что б не словить race condition я размножил необходимые файлы на три клона (предполагается, что батч режим будет работать комплектами по 3 процесса). Как только один из клонов становится занят каким то процессом я в эту папку подкладываю файл project.loc.

Соответственно, мне необходимо написать bash скрипт, который будет идти последовательно по директориям clone1/2/3 и смотреть, есть ли там мьютекс project.loc, и как только находит папку без этого файла возвращать ее полный путь /<some_dir>/clone../.

Если есть более простое решение то с радостью рассмотрю.

P.S. я немного нуб в bash, поэтому я был бы очень благодарен за более подробный ответ.

Ответы

▲ 3Принят

Можно сделать for-цикл, который будем останавливать, если файл project.poc не найден:

output=""

for i in some_dir/clone*; do
  if [ ! -f "$i/project.loc" ]; then
    output="$i"
    break
  fi
done

echo "$output"

Таким образом, в переменную output будет записана первая попавшася директория, в которой нет файла project.loc.

▲ 1

Можно обойтись без цикла:

$ mkdir clone{1,2,3}
$ touch clone2/project.poc
$ test=$(ls clone{1,2,3}/project.poc 2>/dev/null)
$ echo $test
clone2/project.poc