mkdir-p в Mac


Я читал описание Man-страницы OSX. Он имеет следующее описание относительно mkdir -p:

-p

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

Я не совсем следую этому описанию. особенно "если этот параметр не указан, то полный префикс пути каждого операнда должен уже существовать. С другой стороны, если указан этот параметр, то не будет сообщаться об ошибке, если каталог, заданный в качестве операнда, уже существует."

Есть ли у кого-нибудь пример относительно этого объяснения?

3 10

3 ответа:

Учитывая эту структуру каталогов:

/
  foo/
  bar/
    baz/

Очевидно, что это сработает:

mkdir /foo/x

Это будет не работать:

mkdir /foo/x/y

Поскольку /foo/x не существует, каталог /foo/x/y не может быть создан под ним. Префикс /foo/x/ необходимо существовать для того, чтобы творить /foo/x/y.

Вот где появляется -p. Это работает:

mkdir -p /foo/x/y

/foo/x будет неявно создаваться вместе с /foo/x/y.

Если вы попытаетесь:

mkdir /bar/baz

Вы получите ошибка, что каталог уже существует. Однако, если вы это сделаете:

mkdir -p /bar/baz

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

Представьте, что у вас есть пустая папка, и вы хотите создать поддиректорию под названием "d1" и поддиректорию внутри "d1" под названием "d2". Обычно вы должны сделать это:

mkdir d1
mkdir d1/d2

С помощью опции "- p " вы можете попросить mkdir создать промежуточный каталог (d1) для вас:

mkdir -p d1/d2

Бит, о котором вы спрашиваете, говорит, что если "d1" уже существует, и вы используете "mkdir-p", то это не будет иметь значения, что он уже есть, и не будет никаких сообщений об ошибках.

Эта работа над версией 10.10.4

mkdir -pv d1/d/d3