Является ли mkdir -p полностью безопасным, если папка для создания уже существует?

13

Скажем, у меня есть папка:

./folder/

Внутри него много файлов и даже подкаталогов.

Когда я выполню:

mkdir -p folder

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

AGamePlayer
источник
2
Помощь mkdir говорит, что каталоги создаются только тогда, когда их нет. Для меня это означает, что когда каталог существует, ничего не делается.
Марко

Ответы:

23

mkdir -p не выдаст вам ошибку, если каталог уже существует и содержимое каталога не изменится.

Ручной ввод для mkdir

ARG
источник
1
Этот ответ не кажется правильным. mkdir действительно выдает ошибку, если каталог существует, если только не используется флаг -p.
Аарон Чикали
по ошибке вы можете проверить код, подобный этому, if(err.code == 'EEXIST')это условие станет истинным, если каталог уже существует.
user403173
12

Портативное сценарий будет полагаться на POSIX, в котором говорится о mkdir«S -pопции:

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

и если нет сообщений об ошибках, -pопция выполнила свою работу:

Создайте все недостающие промежуточные компоненты пути.

Томас Дики
источник
4

mkdir выдаст вам ошибку, если каталог уже существует.

mkdir -p НЕ выдаст ошибку, если каталог уже существует. Кроме того, каталог останется нетронутым, то есть содержимое будет сохранено, как было.

Тушар Вазирани
источник
0

Вы говорите, что,

Когда я выполню, mkdir -p folderя не увижу никаких ошибок, даже предупреждений.

Вы увидите ошибку, если команда не выполнится. -pФлаг только подавляет ошибки , если каталог уже существует.

touch x
mkdir -p x
mkdir: cannot create directory ‘x’: File exists

Та же проблема возникнет, если вы попытаетесь создать каталог как обычный пользователь, скажем, в /etc.

То, что -pбудет подавлено, это ошибки, которые будут срабатывать, когда целевой каталог уже существует

mkdir y
mkdir -p y

Однако во всех случаях вы ничего не потеряете, и ничего не изменится. В ситуациях с ошибками у вас просто не будет ожидаемой директории.

roaima
источник
Это больше похоже на комментарий, чем на ответ.
G-Man говорит: «Восстанови Монику»
Я задавался вопросом об этом, но я специально опровергаю утверждение в вопросе ОП: « Когда я выполню, mkdir -p folderя не увижу никаких ошибок, даже предупреждений »
roaima