Sto scrivendo uno script di shell da eseguire sotto KornShell (ksh) su AIX. Vorrei usare il comando mkdir
per creare una directory. Ma la directory potrebbe già esistere, nel qual caso non voglio fare nulla. Quindi voglio fare un test per vedere che la directory non esiste, o sopprimere l'errore "File exists" che mkdir
lancia quando cerca di creare una directory esistente.
Qualche idea sul modo migliore per farlo?
Prova mkdir -p
:
mkdir -p foo
Si noti che questo creerà anche qualsiasi directory intermedia che non esiste; per esempio,
mkdir -p foo/bar/baz
creerà le directory foo
, foo/bar
, e foo/bar/baz
se non esistono.
Alcune implementazioni come GNU mkdir
includono mkdir --parents
come alias più leggibile, ma questo non è specificato in POSIX/Single Unix Specification e non è disponibile su molte piattaforme comuni come macOS, varie BSD e vari Unix commerciali, quindi dovrebbe essere evitato.
Se si desidera un errore quando le directory genitori non esistono, e si vuole creare la directory se non esiste, allora si può test
per l'esistenza della directory prima:
[ -d foo ] || mkdir foo
Questo dovrebbe funzionare:
$ mkdir -p dir
oppure:
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 vi avvertirà se il nome della directory che state cercando di creare è già in uso da qualcosa di diverso da una directory.