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?

15voto

Visuwa Bharathi K Punkte 141
directory_name = "foo"

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

15voto

Dies ist eine einfache Funktion (Bash-Shell), mit der Sie ein Verzeichnis erstellen können, wenn es nicht existiert.

#------------------------------------------#
# Create a directory if it does not exist. #
#------------------------------------------#
# Note the "-p" option in the mkdir        #
# command which creates directories        #
# recursively.                             #
#------------------------------------------#
createDirectory() {
   mkdir -p -- "$1"
}

Sie können die obige Funktion wie folgt aufrufen:

createDirectory "$(mktemp -d dir-example.XXXXX)/fooDir/BarDir"

Der obige Befehl erstellt fooDir und BarDir, wenn sie nicht existieren. Beachten Sie die Option "-p" im Befehl mkdir, mit der Verzeichnisse rekursiv erstellt werden.

12voto

alkar Punkte 5368

Oder wenn Sie zuerst prüfen wollen, ob es sie gibt:

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

-e ist der Existenztest für KornShell .

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

11voto

vkrams Punkte 6857

Verweis auf die Manpage man mkdir für die Option - p

   -p, --parents
          no error if existing, make parent directories as needed

die alle Verzeichnisse in einem gegebenen Pfad erstellt, falls vorhanden, keinen Fehler auslöst, ansonsten alle Verzeichnisse von links nach rechts im gegebenen Pfad erstellt. Probieren Sie den folgenden Befehl aus. die Verzeichnisse newdir y anotherdir nicht existiert, bevor Sie diesen Befehl eingeben

Korrekte Verwendung

mkdir -p /tmp/newdir/anotherdir

Nach der Ausführung des Befehls können Sie sehen newdir y anotherdir unter /tmp erstellt. Sie können diesen Befehl so oft Sie wollen ausführen, der Befehl hat immer exit(0) . Aus diesem Grund verwenden die meisten Leute diesen Befehl in Shell-Skripten, bevor sie die eigentlichen Pfade verwenden.

9voto

dash-o Punkte 12349

Verbesserung der 'klassischen' Lösung (von Brian Campbell) - um den Fall eines Symlinks zu einem Verzeichnis zu behandeln.

[ -d foo/. ] || mkdir foo

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