окружите команды, чтобы проверить и создать dir

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

export VIDEOS=(.mp4 .wmv .avi .flv .mkv .m4u .mpg .mpeg)

и затем сделайте

ls ${VIDEOS[*]/./*.}

Если Вы только хотите перечислить видео с именами, запускающимися с foo, Вы сделали бы

ls ${VIDEOS[*]/./foo*.}
2
30.11.2011, 15:36
3 ответа

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

что Вы ищете? Посмотрите man test для деталей.

Или достигнуть обеих из Ваших целей:

 _DIR=/var/lib/mysql/tmp
 [ -d ${_DIR} ] && rm -rf ${_DIR}
 mkdir ${_DIR}
3
27.01.2020, 21:55
  • 1
    Можно ли объяснить сценарий, который Вы записали, я не совсем знаком со сценарием оболочки... –  Mellon 29.11.2011, 15:16
  • 2
    [ на самом деле команда test на большинстве Нельдов так вышеупомянутые чтения test -d DIR или буквально: выйдите чисто (с кодом 0), если DIR существует и является каталогом. На самом деле все это не абсолютно necssary как rm -rf не будет жаловаться на несуществующий каталог, т.е. rm -rf DIR; mkdir DIR сделал бы задание. –  u-punkt 29.11.2011, 15:31
  • 3
    я предпочитаю решение в Вашем выше комментария больше, чем тот в разделе ответа. Поскольку я упомянул в своем сообщении, более изящное лучше.Спасибо. –  Mellon 29.11.2011, 15:39
  • 4
    Второй фрагмент кода небезопасен, как это в настоящее время. Необходимо заключить в кавычки ${_DIR} позволить пробелы или символы, которые интерпретируются оболочкой. –  Chris Down 30.11.2011, 01:12

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

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        Create intermediate directories as required.  If this option is
          not specified, the full path prefix of each operand must already
          exist.  On the other hand, with this option specified, no error
          will be reported if a directory given as an operand already
          exists.  Intermediate directories are created with permission
          bits of ``rwxrwxrwx'' (0777) as modified by the current umask,
          plus write and search permission for the owner.
2
27.01.2020, 21:55

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

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

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

1
27.01.2020, 21:55
  • 1
    , я пытался использовать сборку Ruby - в File.exists? ('/var/lib/mysql/tmp'), но это всегда возвращает false, хотя у меня есть tmp dir, я предполагаю, что это вызвано тем, что только у пользователя root есть доступ к пути, как я упомянул в своем сообщении. Вот почему я не использовал Ruby для проверки, но если бы у Вас есть какое-либо обходное решение для этого, я хотел бы услышать. –  Mellon 29.11.2011, 15:25
  • 2
    Вы могли пропустить тест и просто сделать rm -rf /var/lib/mysql/tmp; mkdir -p /var/lib/mysql/tmp, как другие предположили, но это точно не отвечает на Ваш вопрос, так как он удаляет и воссоздает каталог /var/lib/mysql/tmp каждый раз, также когда это существует заранее. –  Peter John Acklam 30.11.2011, 10:42

Теги

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