it-swarm.com.de

Wie mkdir nur, wenn noch kein Verzeichnis existiert?

Ich schreibe ein Shell-Skript, das unter der KornShell (ksh) unter AIX ausgeführt wird. Ich möchte mit dem Befehl mkdir ein Verzeichnis erstellen. Das Verzeichnis existiert jedoch möglicherweise bereits, in diesem Fall möchte ich nichts tun. Ich möchte also entweder testen, ob das Verzeichnis nicht vorhanden ist, oder den Fehler "Datei vorhanden" unterdrücken, den mkdir auslöst, wenn ein vorhandenes Verzeichnis erstellt wird. 

Irgendwelche Gedanken, wie man das am besten macht?

1501
Spike Williams

Versuchen Sie 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, falls diese nicht vorhanden sind.

Einige Implementierungen wie GNU mkdir enthalten mkdir --parents als besser lesbaren Alias, dies ist jedoch nicht in der POSIX/Single Unix-Spezifikation angegeben und auf vielen gängigen Plattformen wie macOS, verschiedenen BSDs und verschiedenen kommerziellen Unixen nicht verfügbar vermieden.

Wenn Sie einen Fehler wünschen, wenn übergeordnete Verzeichnisse nicht vorhanden sind, und das Verzeichnis erstellen möchten, falls es nicht vorhanden ist, können Sie zuerst test für das Vorhandensein des Verzeichnisses verwenden:

[ -d foo ] || mkdir foo
2592
Brian Campbell

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

dadurch wird das Verzeichnis erstellt, wenn es nicht vorhanden ist. Sie werden jedoch gewarnt, wenn der Name des Verzeichnisses, das Sie erstellen möchten, bereits von einem anderen als einem Verzeichnis verwendet wird.

133
Alnitak

Verwenden Sie das Flag -p. 

man mkdir
mkdir -p foo
76
jimmyorr

Definieren komplexer Verzeichnisbäume mit einem Befehl

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

Wenn Sie keine Fehlermeldung anzeigen möchten:

[ -d newdir ] || mkdir newdir

Wenn Sie Ihre eigene Fehlermeldung anzeigen möchten:

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

Das alte ausprobiert und wahr

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

wird tun, was Sie wollen, mit keiner der Rennbedingungen, die viele andere Lösungen bieten.

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

18
paxdiablo

mkdir foo funktioniert auch, wenn das Verzeichnis vorhanden ist . Damit das Verzeichnis nur funktioniert, wenn das Verzeichnis "foo" nicht vorhanden ist, verwenden Sie das Flag -p.

Beispiel: -

mkdir -p foo

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

13
Atul Ranjan
directory_name = "foo"

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

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 Handbuch für die korn Shell zu googeln.

7
alkar

mkdir unterstützt -p switch auf Windows 8+ -Systemen nicht mehr.

Sie können dies verwenden:

IF NOT EXIST dir_name MKDIR dir_name
7
Karanvir Kang

Sie können entweder die if-Schleife verwenden, um zu prüfen, ob das Verzeichnis vorhanden ist, oder nicht, wenn das Verzeichnis nicht erstellt wird.

1) dir =/home/dir_name

if [ ! -d $dir ]
then
     mkdir $dir
else
     echo "Directory exists"  
fi

2) Sie können ein Verzeichnis mit mkdir mit der Option -p erstellen. Es wird geprüft, ob das Verzeichnis nicht verfügbar ist. 

mkdir -p $dir

mit mkdir -p kann auch die Baumstruktur des Verzeichnisses erstellt werden. Wenn Sie das übergeordnete und das untergeordnete Verzeichnis mit demselben Befehl erstellen möchten, können Sie mkdir -p wählen

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
2
AbhinavVaidya8
mkdir -p sam
  • mkdir = Verzeichnis erstellen
  • -p = --eltern
  • (kein Fehler, falls vorhanden, übergeordnete Verzeichnisse nach Bedarf erstellen)
1
Paritosh Yadav

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 oben genannte Funktion aufrufen als: 

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.

Verweis auf Manpage man mkdir für Option -p

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

dadurch werden alle Verzeichnisse in einem bestimmten Pfad erstellt. Falls vorhanden, wird kein Fehler ausgegeben. Andernfalls werden alle Verzeichnisse im angegebenen Pfad von links nach rechts erstellt. Versuchen Sie den folgenden Befehl. Die Verzeichnisse newdir und anotherdir existieren vor der Ausgabe dieses Befehls nicht

Richtige Benutzung

mkdir -p /tmp/newdir/anotherdir

Nach der Ausführung des Befehls können Sie newdir und anotherdir sehen, die unter/tmp erstellt wurden. Sie können diesen Befehl so oft ausführen, wie Sie möchten. Der Befehl hat immer exit(0). Aus diesem Grund verwenden die meisten Benutzer diesen Befehl in Shell-Skripts, bevor sie diese Pfade verwenden.

1
vkrams