2866 Stimmen

Wie mkdir nur, wenn ein Verzeichnis nicht bereits vorhanden ist?

Ich schreibe ein Shell-Skript, das unter der KornShell (ksh) auf AIX läuft. Ich würde gerne die mkdir um ein Verzeichnis zu erstellen. Aber das Verzeichnis könnte bereits existieren, und in diesem Fall möchte ich nichts tun. Ich möchte also entweder prüfen, ob das Verzeichnis nicht existiert, oder den Fehler "Datei existiert" unterdrücken, der mkdir auslöst, wenn es versucht, ein bestehendes Verzeichnis zu erstellen.

Wie kann ich dies am besten tun?

4657voto

Brian Campbell Punkte 304982

トライ mkdir -p :

mkdir -p foo

Beachten Sie, dass dabei auch alle Zwischenverzeichnisse erstellt werden, die noch nicht existieren, zum Beispiel

mkdir -p foo/bar/baz

werden Verzeichnisse erstellt foo , foo/bar y foo/bar/baz wenn es sie nicht gibt.

Einige Implementierungen wie GNU mkdir einschließen. mkdir --parents als ein besser lesbarer Alias, aber dies ist in der POSIX/Single Unix Spezifikation nicht spezifiziert und auf vielen gängigen Plattformen wie macOS, verschiedenen BSDs und verschiedenen kommerziellen Unixen nicht verfügbar, daher sollte es vermieden werden.

Wenn Sie eine Fehlermeldung erhalten möchten, wenn übergeordnete Verzeichnisse nicht existieren, und das Verzeichnis erstellen möchten, wenn es nicht existiert, dann können Sie test ob das Verzeichnis existiert:

[ -d foo ] || mkdir foo

256voto

Alnitak Punkte 324207

Das sollte funktionieren:

$ mkdir -p dir

oder:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

das das Verzeichnis erstellt, wenn es nicht existiert, Sie aber warnt, wenn der Name des Verzeichnisses, das Sie zu erstellen versuchen, bereits von etwas anderem als einem Verzeichnis verwendet wird.

115voto

jimmyorr Punkte 10280

Verwenden Sie das Flag -p.

man mkdir
mkdir -p foo

91voto

Oleg Punkte 869

Komplexe Verzeichnisbäume mit einem Befehl definieren

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

54voto

Jahid Punkte 19666

Wenn Sie keine Fehlermeldung anzeigen lassen wollen:

[ -d newdir ] || mkdir newdir

Wenn Sie Ihre eigene Fehlermeldung anzeigen möchten:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X