Чи mkdir -p абсолютно безпечний при створенні папки вже існує


13

Скажіть, у мене є папка:

./folder/

Всередині нього багато файлів і навіть підкаталогів.

Коли я виконую:

mkdir -p folder

Я не побачу жодних помилок, навіть попереджень. тому просто хочу підтвердити, чи є щось втрачене чи змінене в результаті цієї команди?


2
Довідка mkdir говорить, що каталоги створюються лише тоді, коли їх немає. Це означає, що коли каталог існує, нічого не робиться.
Марко

Відповіді:


23

mkdir -p не дасть вам помилки, якщо каталог вже існує і вміст каталогу не зміниться.

Ручний запис для mkdir


1
Ця відповідь не здається правильною. mkdir дійсно видає помилку, якщо каталог існує, якщо тільки не використовується прапор -p.
Аарон Цікалі

помилково, ви можете перевірити код на зразок цього, if(err.code == 'EEXIST')ця умова стане справжньою, якщо каталог вже існує.
користувач403173

12

Портативний скрипт буде покладатися на POSIX, який говорить про варіант mkdir' -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

Однак у всіх випадках ви нічого не втратите, і нічого не зміниться. У ситуаціях помилок у вас просто не буде каталогу, якого ви очікували.


Це здається більше коментарем, ніж відповіддю.
G-Man каже: "Відновіть Моніку"

Мені це було цікаво, але я конкретно спростовую твердження у питанні ОП: " Коли я виконую, mkdir -p folderя не побачу жодних помилок, навіть попереджень ".
roaima
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.