Проверьте рекурсивно, если каталоги в пути существуют

Это немного связано с моим вопросом здесь. В процессе нахождения источника проблемы я пытался понять то, что делается в initrd. Мое предположение - то, что Вы говорите о nash - но я не смог найти много об этом.

2
21.09.2013, 01:27
2 ответа

Можно просто сказать mkdir сделать пути с -p переключатель:

$ mkdir -p /dir1/dir2/dir3/dir4

выборка от mkdir страница справочника

   -p, --parents
          no error if existing, make parent directories as needed

Ссылки

8
27.01.2020, 21:51
  • 1
    Спасибо, это определенно намного лучше, чем изобретение велосипед, как я сделал с a while цикл. –  MBR 20.09.2013, 15:08
  • 2
    @MBR - да существование этого командного коммутатора не настолько интуитивно, пока Вы не видели его прежде, затем это имеет общий смысл. –  slm♦ 20.09.2013, 15:09

Я нашел решение, с помощью cut и a while- цикл

#!/bin/bash

RUNDIR=$1

n=2
TMPDIR=
while [ $(echo $RUNDIR | cut -d '/' -f$(printf $n)) ]; do
      TMPDIR=$TMPDIR'/'$(echo $RUNDIR | cut -d '/' -f$(printf $n))
      if [ -a $TMPDIR ]; then
         echo $TMPDIR' exists'
      else
         echo $TMPDIR' does not exist; creating directory...'
         mkdir $TMPDIR
      fi
      n=$(printf $(($n + 1)))
done

Существует ли более компактный способ сделать это?

0
27.01.2020, 21:51
  • 1
    Действительно ли это было непосредственным самоответом? строки –  a CVn 20.09.2013, 15:29
  • 2
    9 - 14 (также считающий новые строки, строки 7-12 из содержания) могут быть заменены чем-то как test -a "$TMPDIR" || mkdir "$TMPDIR" если Вам не нужен вывод также. Финал n инкремент может быть записан n=$(($n + 1)), никакая потребность в printf там то, что я вижу. При помощи basename и dirname Вы не должны анализировать путь сами. (И всегда заключайте свои переменные в кавычки, если Вы не положительны, что они никогда не будут содержать пробелы, и несмотря на это, необходимо заключить им в кавычки так или иначе на всякий случай.) И даже с этим, mkdir -p как указано @slm, вероятно, лучший ответ. :) –  a CVn 20.09.2013, 15:31
  • 3
    Это было; я тестировал вещи при записи вопроса, и я выяснил, что это работало хотя не очень компактный. Спасибо за предложенное улучшение! –  MBR 20.09.2013, 15:32

Теги

Похожие вопросы