Come mkdir solo se una directory non esiste già?
Domanda
Sto scrivendo uno script di shell per l'esecuzione con l'KornShell (ksh) su AIX. Vorrei utilizzare il comando mkdir
per creare una directory. Ma la directory potrebbe già esistere, nel qual caso io non voglio fare nulla. Quindi voglio né test per vedere che la directory non esiste, o sopprimere "esiste file" l'errore che mkdir
getta quando si tenta di creare una directory esistente.
Ogni pensiero sul modo migliore per fare questo?
Soluzione
mkdir -p
:
mkdir -p foo
Si noti che questo creerà anche le directory intermedie che non esistono; per esempio,
mkdir -p foo/bar/baz
creerà le directory foo
, foo/bar
e foo/bar/baz
se non esistono.
Alcuni implementazione come GNU mkdir
includono mkdir --parents
come un alias più leggibile, ma questo non è specificato in POSIX / Single UNIX Specification e non disponibile su molte piattaforme comuni come MacOS, vari BSD, e vari Unix commerciali, e quindi dovrebbe essere evitato .
Se si desidera un errore quando non esistono directory principali, e vogliono creare la directory se non esiste, allora si può test
per l'esistenza della directory prima:
[ -d foo ] || mkdir foo
Altri suggerimenti
Questo dovrebbe funzionare:
$ mkdir -p dir
o
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
che creerà la directory se non esiste, ma si avvertono se il nome della directory che si sta cercando di creare è già in uso da qualcosa di diverso da una directory.
Utilizzare l'opzione -p.
man mkdir
mkdir -p foo
La definizione di alberi di directory complesse con un solo comando
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Se non si desidera visualizzare alcun messaggio di errore:
[ -d newdir ] || mkdir newdir
Se si desidera mostrare il proprio messaggio di errore:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
Il vecchio vero e provato
mkdir /tmp/qq >/dev/null 2>&1
farà quello che vuoi con nessuna delle condizioni di gara molte delle altre soluzioni sono.
A volte i più semplici (e più brutti) le soluzioni sono i migliori.
mkdir foo
funziona anche se la directory esiste.
Per farlo funzionare solo se la directory chiamata "pippo" non esiste, provare a utilizzare il flag -p
.
Esempio: -
mkdir -p foo
Questo creerà la directory chiamata "pippo" solo se non esiste. :)
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
Se si desidera controllare per l'esistenza prima:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-e è la prova esiste per Korn.
Si può anche provare googling un manuale shell Korn.
mkdir -p non supporta passare più sui sistemi Windows 8+.
È possibile utilizzare questo:
IF NOT EXIST dir_name MKDIR dir_name
È possibile utilizzare se ciclo per controllare se directory esiste o no, se non uscite di creare la directory.
1) dir = / home / dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2) è possibile utilizzare directory mkdir -p con l'opzione per creare una directory. Si verificherà se la directory non è disponibile lo farà.
mkdir -p $dir
mkdir -p permette anche di creare la struttura ad albero della directory. Se si desidera creare il genitore e directory figlio utilizzando lo stesso comando, può optare mkdir -p
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
Questa è una funzione semplice (shell bash) che consente di creare una directory se non esiste.
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}
È possibile richiamare la funzione di cui sopra come:
createDirectory / tmp / fooDir / BarDir
È possibile che questo crea fooDir e BarDir se non esistono. Si noti l'opzione "-p" in comando mkdir che crea le directory ricorsivamente. Spero che questo aiuti.
Con riferimento alle man page man mkdir
per l'opzione -p
-p, --parents
no error if existing, make parent directories as needed
che creerà tutte le directory in un dato percorso, se esiste getta nessun errore in caso contrario si crea tutte le directory da sinistra a destra nel percorso indicato. Provate il seguente comando. la directory newdir
e anotherdir
non esiste prima di emettere il comando
Utilizzo a norme
mkdir -p /tmp/newdir/anotherdir
Dopo l'esecuzione del comando è possibile vedere newdir
e anotherdir
creati sotto / tmp. È possibile emettere questo comando tutte le volte che si desidera, il comando ha sempre exit(0)
. Per questo motivo la maggior parte delle persone utilizzano questo comando negli script di shell prima di utilizzare questi percorsi effettivi.
mkdir -p sam
- mkdir = Fai Directory
- -p = --parents
- (nessun errore se esistente, fare directory padre, se necessario)