Czy mkdir -p jest całkowicie bezpieczny, gdy tworzenie folderu już istnieje

13

Powiedz, że mam folder:

./folder/

Wewnątrz znajduje się wiele plików, a nawet podkatalogów.

Kiedy wykonam:

mkdir -p folder

Nie zobaczę żadnych błędów, nawet ostrzeżeń. więc po prostu chcę potwierdzić, czy w wyniku tego polecenia coś zostało utracone lub zmienione?

AGamePlayer
źródło
2
Pomoc mkdir mówi, że katalogi są tworzone tylko wtedy, gdy nie są obecne. To sugeruje mi, że kiedy katalog istnieje, nic się nie robi.
Marco

Odpowiedzi:

23

mkdir -p nie spowoduje błędu, jeśli katalog już istnieje, a zawartość katalogu się nie zmieni.

Ręczne wprowadzanie dla mkdir

ARG
źródło
1
Ta odpowiedź wydaje się nieprawidłowa. mkdir rzeczywiście emituje błąd, jeśli katalog istnieje, chyba że użyje flagi -p.
Aaron Cicali
przez pomyłkę możesz sprawdzić kod, taki jak if(err.code == 'EEXIST')ten warunek spełni się, jeśli katalog już istnieje.
user403173,
12

Przenośny skrypt polegać na POSIX, który mówi o mkdir„s -popcji:

Każdy operand dir, który nazywa istniejący katalog, zostanie zignorowany bezbłędnie.

a jeśli nie zgłoszono żadnych błędów, -popcja wykonała swoją pracę:

Utwórz brakujące komponenty pośredniej nazwy ścieżki.

Thomas Dickey
źródło
4

mkdir BĘDZIE wyświetlał błąd, jeśli katalog już istnieje.

mkdir -p NIE BĘDZIE wyświetlać błędu, jeśli katalog już istnieje. Ponadto katalog pozostanie nietknięty, tzn. Zawartość zostanie zachowana tak, jak była.

Tushar Vazirani
źródło
0

Mówisz tak,

Podczas wykonywania mkdir -p foldernie widzę żadnych błędów, nawet ostrzeżeń.

Zobaczysz błąd, jeśli polecenie się nie powiedzie. -pFlag tłumi tylko błędy jeśli katalog już istnieje.

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

Ten sam problem występuje w przypadku próby utworzenia katalogu jako zwykły użytkownik, powiedzmy, /etc.

Co -pwstrzyma są błędy, które mogłyby być wyzwalane, gdy już istnieje katalog docelowy

mkdir y
mkdir -p y

Jednak we wszystkich przypadkach nic nie stracisz i nic się nie zmieni. W sytuacjach błędów po prostu nie będziesz mieć katalogu, którego się spodziewałeś.

roaima
źródło
To wydaje się bardziej komentarzem niż odpowiedzią.
G-Man mówi „Przywróć Monikę”
Zastanawiałem się nad tym, ale szczególnie odpieram stwierdzenie zawarte w pytaniu PO: „ Gdy wykonam mkdir -p folder, nie zobaczę żadnych błędów, nawet ostrzeżeń
roaima