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?

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top