LINUX.ORG.RU

mkdir -p создает дерево директорий целиком, со всеми недостающими промежуточными каталогами, с -p можно писать так: mkdir -p foo/bar/spam/eggs, без -p можно создавать директории только в текущем каталоге оболочки.

desu
()

Манов под рукой нет, но, насколько помню, ключ -p позволяет создавать вложенную структуру каталогов, а не один, как просто mkdir. То есть, вызов mkdir -p dir1/dir2/dir3 создаст каталог dir1 (если он не существует), в нём создаст каталог dir2 (если он не существует) и тп. В то же время вызов просто mkdir dir1/dir2/dir3 создаст только последний каталог в списке и то при условии что все каталоги уровнем выше существуют (иначе завершит работу и ругнется в консоль)

kss ★★★★★
()
Ответ на: комментарий от desu

>без -p можно создавать директории только в текущем каталоге оболочк
o.O wtf?

fr_butch
()

Вот плохо же читали. mkdir создаёт директорию, mkdir -p создаёт много директорий. Например: mkdir /mount/point/chto/to/tam выдаст ошибку, а если указать флаг -p, то не выдаст.

skyline
()

Странный вообще вопрос:

$ mkdir --help
...
-p, --parents      не выдавать ошибок если существует, создавать
                   родительские каталоги если необходимо
...

Меня вот больше интересует почему этот параметр не по дефолту? Ну предки не додумали, а что сейчас мешает это исправить? Или заморожен для какой-нибудь мифической совместимости? Или есть другие причины необходимости такого поведения...

А вообще у меня уже давно mkdir -p забит на алиас.

seonix
()
Ответ на: комментарий от seonix

почему этот параметр не по дефолту?

Допустим, ожидается, что в текущем каталоге есть подкаталог foo, в котором есть подкаталог bar, в котором надо создать подкаталог blabla.

$ mkdir foo/bar/blabla
mkdir: cannot create directory `foo/bar/blabla': No such file or directory
Если подкаталогов foo/bar нет, это может быть плохой знак. Зависит.

Xenesz ★★★★
()
Ответ на: комментарий от Xenesz

Допустим, ожидается, что в текущем каталоге есть подкаталог foo, в котором есть подкаталог bar, в котором надо создать подкаталог blabla.

Если подкаталогов foo/bar нет, это может быть плохой знак. Зависит.

Что-то я туплю наверное, но так и не понял почему ключ "-p" не может быть по дефолту. Пусть текущий каталог чист:

$ mkdir ./foo/bar
mkdir: невозможно создать каталог «./foo/bar»: Нет такого файла или каталога
$ mkdir -p ./foo/bar
$ ls -R
.:
foo/

./foo:
bar/

./foo/bar:
$ mkdir -p ./foo/bar/blabla
$ ls -R
.:
foo/

./foo:
bar/

./foo/bar:
blabla/

./foo/bar/blabla:
Явно видно, что ключ "-p" позволяет не задумываться о наличии дерева каталогов перед желаемым.

seonix
()
Ответ на: комментарий от seonix

ключ "-p" позволяет не задумываться

В некоторых случаях надо таки задуматься. Допустим, промежуточные каталоги должны были быть созданы при установке какого-то пакета. Они не были созданы — следовательно…

Если подкаталогов foo/bar нет, это может быть плохой знак.

Xenesz ★★★★
()
Ответ на: комментарий от wolfgang

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

sin_a ★★★★★
()
Ответ на: комментарий от Xenesz

>В некоторых случаях надо таки задуматься. Допустим, промежуточные каталоги должны были быть созданы при установке какого-то пакета. Они не были созданы — следовательно…

Ну как я понял, такая строгость нужна главным образом для скриптов, чтоб ошибки вываливать :-)

В ручном использование, имхо, удобней когда по дефолту.

seonix
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.