mkdir-p в Mac
Я читал описание Man-страницы OSX. Он имеет следующее описание относительно mkdir -p
:
-p
Создайте промежуточные каталоги по мере необходимости. Если этот параметр не указан, то полный префикс пути каждого операнда должен уже существовать. С другой стороны, если указан этот параметр, то не будет сообщаться об ошибке, если каталог, заданный в качестве операнда, уже существует. Промежуточные каталоги создаются с битами разрешений rwxrwxrwx (0777) как изменено текущей umask, плюс разрешение на запись и поиск для владельца.
Я не совсем следую этому описанию. особенно "если этот параметр не указан, то полный префикс пути каждого операнда должен уже существовать. С другой стороны, если указан этот параметр, то не будет сообщаться об ошибке, если каталог, заданный в качестве операнда, уже существует."
Есть ли у кого-нибудь пример относительно этого объяснения?
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", то это не будет иметь значения, что он уже есть, и не будет никаких сообщений об ошибках.