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?

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top