Wie nur mkdir, wenn ein Verzeichnis nicht bereits vorhanden ist?
Frage
Ich schreibe einen Shell-Skript unter dem Kornshell (KSH) auf AIX laufen. Ich mag den mkdir
Befehl verwenden, um ein Verzeichnis zu erstellen. Aber das Verzeichnis bereits vorhanden ist, wobei in diesem Fall will ich nichts tun. Deshalb mag ich entweder Test, um zu sehen, dass das Verzeichnis nicht vorhanden ist, oder unterdrückt die „Datei vorhanden“ Fehler, dass mkdir
wirft, wenn er versucht, ein vorhandenes Verzeichnis zu erstellen.
Alle Gedanken auf, wie dies am besten zu tun?
Lösung
Versuchen Sie mkdir -p
:
mkdir -p foo
Beachten Sie, dass dies auch alle Zwischenverzeichnisse erstellen, die nicht existieren; zum Beispiel,
mkdir -p foo/bar/baz
wird Verzeichnisse erstellen foo
, foo/bar
und foo/bar/baz
, wenn sie nicht vorhanden sind.
Einige Implementierung wie GNU mkdir
umfassen als lesbarer alias mkdir --parents
, aber dies ist nicht angegeben in POSIX / Single Unix Specification und nicht auf viele gemeinsame Plattformen wie MacOS, verschiedenen BSDs und verschiedene kommerzielle Unix-Varianten, so sollte es vermieden werden, .
Wenn Sie einen Fehler wollen, wenn übergeordnete Verzeichnisse nicht existieren, und wollen das Verzeichnis erstellen, wenn es nicht vorhanden ist, dann können Sie test
für die Existenz des Verzeichnisses zuerst:
[ -d foo ] || mkdir foo
Andere Tipps
Dies 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
, die das Verzeichnis erstellen, wenn es nicht vorhanden ist, aber Sie warnt, wenn der Name des Verzeichnisses Sie versuchen, in Gebrauch ist bereits von anderen etwas zu schaffen, als ein Verzeichnis.
Mit der Option -p.
man mkdir
mkdir -p foo
Definieren von komplexen Verzeichnisbäumen mit einem Befehl
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Wenn Sie nicht möchten, keine Fehlermeldung zeigen:
[ -d newdir ] || mkdir newdir
Wenn Sie Ihre eigene Fehlermeldung anzuzeigen:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
Das alte altbewährte
mkdir /tmp/qq >/dev/null 2>&1
wird tun, was Sie mit keiner der Rennbedingungen wollen viele der anderen Lösungen haben.
Manchmal sind die einfachsten (und hässlichste) -Lösungen sind die besten.
mkdir foo
funktioniert auch, wenn das Verzeichnis existiert.
Um es nur funktioniert, wenn das Verzeichnis mit dem Namen „foo“ nicht vorhanden ist, versuchen Sie die -p
Flag verwendet.
Beispiel: -
mkdir -p foo
Dies wird das Verzeichnis mit dem Namen „foo“ nur erstellen, wenn es nicht existiert. :)
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
Oder wenn Sie die Existenz überprüfen zuerst:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-e ist der exist Test für Korn-Shell.
Sie können auch versuchen, eine Korn-Shell manuell googeln.
mkdir unterstützt nicht mehr auf Windows wechseln -p 8+ Systeme.
Sie können diese verwenden:
IF NOT EXIST dir_name MKDIR dir_name
Sie entweder verwenden können, wenn Schleife zu überprüfen, ob Verzeichnis existiert oder nicht, wenn es austritt nicht als das Verzeichnis erstellen.
1) dir = / home / dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2) können Sie Verzeichnis mit mkdir mit Option -p ein Verzeichnis erstellen. Es wird geprüft, ob das Verzeichnis nicht vorhanden ist, es wird.
mkdir -p $dir
mkdir -p ermöglicht auch die Baumstruktur des Verzeichnisses zu erstellen. Wenn Sie die Eltern-Kind-Verzeichnisse mit demselben Befehl erstellen möchten, können sich dafür entscheiden mkdir -p
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
Dies ist eine einfache Funktion (Bash-Shell), die Sie ein Verzeichnis erstellen kann, wenn es nicht existiert.
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}
können Sie rufen die obige Funktion als:
create / tmp / fooDir / BarDir
Das oben schafft fooDir und BarDir wenn sie nicht existieren. Beachten Sie die Option „-p“ in mkdir Befehl, die rekursiv Verzeichnisse erstellt. Hoffe, das hilft.
Unter Bezugnahme auf die Manpage man mkdir
für Option -p
-p, --parents
no error if existing, make parent directories as needed
, die alle Verzeichnisse in einem bestimmten Pfad erstellen, liegt vor, wenn kein Fehler wirft sonst schafft es alle Verzeichnisse von in dem angegebenen Pfad links nach rechts. Versuchen Sie, den folgenden Befehl. die Verzeichnisse newdir
und anotherdir
nicht existiert, bevor Sie diesen Befehl ausgeben
Gemäßer Gebrauch
mkdir -p /tmp/newdir/anotherdir
Nach der Ausführung des Befehls können Sie newdir
und anotherdir
erstellt unter / tmp sehen. Sie können diesen Befehl so oft ausgeben Sie wollen, müssen Sie den Befehl immer exit(0)
. Aus diesem Grund verwenden die meisten Menschen diesen Befehl in Shell-Skripten, bevor diese tatsächlichen Pfade verwenden.
mkdir -p sam
- mkdir = Make-Verzeichnis
- -p = --parents
- (kein Fehler, falls vorhanden, stellt übergeordnete Verzeichnisse nach Bedarf)