Используя поиск GNU, мы можем сделать это как:
find. -type f -name Makefile \
-execdir sh -c '
find. ! -name. -prune -name \*.c -execdir pwd \; -quit
' \;
При этом мы сначала ищем обычные файлы с именем Makefile, а затем, используя каталог, в котором они должны быть найдены, запускаем команду sh, которая запускает поиск только для поиска файлов.c в этом каталоге и печатает имя каталога при обнаружении первый.c, а затем быстро вышел.
Сам не пользовался, но есть вариант autoFormat
.
fileSystems.<name?>.autoFormat
If the device does not currently contain a filesystem (as determined
by blkid, then automatically format it with the filesystem type specified
in fsType. Use with caution.
Type: boolean
Default: false
Declared by:
<nixpkgs/nixos/modules/tasks/filesystems.nix>
Что-то в этом роде должно работать. Обратите внимание, что это будет форматирование всего диска (, который в любом случае предположительно является виртуальным ), без предварительного создания на нем разделов, как это делает ваш скрипт. Я не уверен, есть ли настройки для автоматического -разбиения диска.
fileSystems."/log" = { device = "${logDevice}";
fsType = "ext4";
autoFormat = true; };