Frage Wie mkdir nur, wenn ein Verzeichnis noch nicht existiert?


Ich schreibe ein Shell-Skript, das unter der KornShell (ksh) unter AIX läuft. Ich würde gerne das benutzen mkdir Befehl zum Erstellen eines Verzeichnisses. Aber das Verzeichnis existiert vielleicht schon, in diesem Fall möchte ich nichts machen. Also möchte ich entweder testen, um zu sehen, dass das Verzeichnis nicht existiert, oder den "File exists" -Fehler unterdrücken mkdir löst aus, wenn es versucht, ein vorhandenes Verzeichnis zu erstellen.

Irgendwelche Gedanken darüber, wie man das am besten macht?


1329
2018-04-27 14:47


Ursprung


Antworten:


Versuchen mkdir -p:

mkdir -p foo

Beachten Sie, dass dadurch auch Zwischenverzeichnisse erstellt werden, die nicht vorhanden sind. zum Beispiel,

mkdir -p foo/bar/baz

erstellt Verzeichnisse foo, foo/bar, und foo/bar/baz wenn sie nicht existieren.

Wenn Sie einen Fehler möchten, wenn keine übergeordneten Verzeichnisse vorhanden sind, und das Verzeichnis erstellen möchten, wenn es nicht existiert, können Sie das tun test für die Existenz des Verzeichnisses zuerst:

[ -d foo ] || mkdir foo

2307
2018-04-27 14:49



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 erstellt das Verzeichnis, wenn es nicht existiert, warnt Sie aber, wenn der Name des Verzeichnisses, das Sie erstellen möchten, bereits von etwas anderem als einem Verzeichnis verwendet wird.


109
2018-04-27 14:50



Verwenden Sie das Flag -p.

man mkdir
mkdir -p foo

70
2018-04-27 14:50



Definieren komplexer Verzeichnisbäume mit einem Befehl

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

58
2017-08-21 20:08



Wenn Sie keine Fehlermeldung anzeigen möchten:

[ -d newdir ] || mkdir newdir

Wenn Sie eine eigene Fehlermeldung anzeigen möchten:

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

20
2018-03-27 03:57



Das Alte ist erprobt und wahr

mkdir /tmp/qq >/dev/null 2>&1

wird tun, was Sie wollen mit keiner der Race Conditions viele der anderen Lösungen haben.

Manchmal sind die einfachsten (und hässlichsten) Lösungen die besten.


17
2018-01-20 12:23



mkdir foo funktioniert auch, wenn das Verzeichnis existiert. Damit es nur funktioniert, wenn das Verzeichnis "foo" nicht existiert, versuchen Sie es mit dem -p Flagge.

Beispiel: -

mkdir -p foo

Dadurch wird nur das Verzeichnis "foo" erstellt, wenn es nicht existiert. :)


10
2017-12-16 11:34



directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi

9
2018-04-27 14:51



Oder wenn Sie zuerst nach Existenz suchen wollen:

if [[ ! -e /path/to/newdir ]]; then
            mkdir /path/to/newdir
fi

-e ist der existierende Test für Korn Shell.

Sie können auch versuchen, ein Korn Shell-Handbuch zu googeln.


7
2017-11-22 12:39