Как найти директорию в которой отсутствует определенный файл?
В файловой системе в директории <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, поэтому я был бы очень благодарен за более подробный ответ.
Ответы (2 шт):
Можно сделать 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.
Можно обойтись без цикла:
$ 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