mkdir -p в Mac

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

-p

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

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

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


person user454083    schedule 09.01.2014    source источник
comment
Пожалуйста, попробуйте на apple.stackexchange.com   -  person trojanfoe    schedule 09.01.2014
comment
@trojanfoe Этот вопрос обычно применим практически ко всем системам с mkdir, а не только к OS X.   -  person deceze♦    schedule 09.01.2014
comment
@deceze тогда поменяй тэги.   -  person trojanfoe    schedule 09.01.2014


Ответы (4)


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

/
  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

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

person deceze♦    schedule 09.01.2014

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

mkdir d1
mkdir d1/d2

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

mkdir -p d1/d2

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

person Mark Setchell    schedule 09.01.2014

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

mkdir -pv d1/d/d3 
person Luis Rodriguez    schedule 02.08.2015

Не уверен, что это только для Mac, но на Mac OS X вы можете сделать

mkdir -p src/{main,test}/{java,resources,scala}

который даст вам не только вложенное, но и декартово произведение ваших каталогов:

src/test/java
src/test/resources
src/test/scala
src/main/java
src/main/resources
src/main/scala
person dr jerry    schedule 27.12.2018