команды оболочки для проверки и создания директории

Я пишу скрипт Ruby, внутри которого я хотел бы вызвать / выполнить некоторые команды оболочки .

Команды оболочки, которые я хотел бы запустить, должны проверить, существует ли каталог с именем ' tmp ' под /var/lib/mysql/ .

( PS только пользователь root может получить доступ /var/lib/mysql/ )

Я знаю, что mkdir создаст каталог, но я не уверен, как сделать команду, чтобы проверить, существует ли каталог или нет .

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

Кто-нибудь может мне помочь?

Является

  [ -d /var/lib/mysql/tmp ] || mkdir /var/lib/mysql/tmp 

что ты ищешь? См. man test для получения дополнительной информации.

Или для достижения обеих ваших целей:

  _DIR=/var/lib/mysql/tmp [ -d ${_DIR} ] && rm -rf ${_DIR} mkdir ${_DIR} 

Следующие две команды оболочки сделают трюк:

 mkdir -p /var/lib/mysql/tmp/ # create directories (that don't exist, yet) rm -rf /var/lib/mysql/tmp/* # delete all files and sub-directories 

Примечание: вам может потребоваться добавить каждую строку с помощью sudo чтобы ваш скрипт Ruby выполнял команды оболочки с привилегиями root. Однако, может быть сложно настроить sudo правильно.

Параметр -p для mkdir устраняет необходимость проверки существования для каталога:

 -p При необходимости создайте промежуточные каталоги.  Если этот параметр
           не указан, полный префикс пути для каждого операнда должен уже
           существовать.  С другой стороны, если указанная опция не указана,
           будет сообщено, если каталог, указанный как операнд уже
           существует.  Промежуточные каталоги создаются с разрешения
           бит `` rwxrwxrwx '' (0777), измененный текущей umask,
           плюс разрешение на запись и поиск для владельца.

Вы можете использовать

 test -d /var/lib/mysql/tmp && rm -rf /var/lib/mysql/tmp/* || mkdir /var/lib/mysql/tmp 

но я предлагаю вам использовать собственные встроенные модули ruby, чтобы проверить, существует ли каталог, а затем вызвать rm … или mkdir … зависимости от результата теста.