shell - vorhanden - php verzeichnis rekursiv erstellen




Wie mkdir nur, wenn ein Verzeichnis noch nicht existiert? (8)

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.

Ich schreibe ein Shell-Skript, das unter der KornShell (ksh) unter AIX läuft. Ich möchte den Befehl mkdir , um ein Verzeichnis zu erstellen. Aber das Verzeichnis existiert vielleicht schon, in diesem Fall möchte ich nichts machen. So möchte ich entweder testen, um zu sehen, dass das Verzeichnis nicht existiert, oder den Fehler "Datei existiert" unterdrücken, den mkdir wenn er versucht, ein existierendes Verzeichnis zu erstellen.

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


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.


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

#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}

Sie können die obige Funktion wie folgt aufrufen:

createDirectory / tmp / fooDir / BarDir

Das obige erzeugt fooDir und BarDir, wenn sie nicht existieren. Beachten Sie die Option "-p" im Befehl mkdir, die Verzeichnisse rekursiv erstellt. Hoffe das hilft.


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.


Verwenden Sie das Flag -p.

man mkdir
mkdir -p foo

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

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

Beispiel: -

mkdir -p foo

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


directory_name = "foo"

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






mkdir