Ik ben een shell script aan het schrijven om onder de KornShell (ksh) op AIX te draaien. Ik wil graag het mkdir
commando gebruiken om een directory aan te maken. Maar de directory kan al bestaan, in welk geval ik niets wil doen. Dus ik wil ofwel testen of de directory niet bestaat, of de "File exists" fout onderdrukken die mkdir
geeft als het een bestaande directory probeert te maken.
Iemand een idee hoe ik dit het beste kan doen?
Probeer mkdir -p
:
mkdir -p foo
Merk op dat dit ook tussenliggende mappen zal aanmaken die'niet bestaan; bijvoorbeeld,
mkdir -p foo/bar/baz
zal mappen foo
, foo/bar
, en foo/bar/baz
aanmaken als ze'niet bestaan.
Sommige implementaties zoals GNU mkdir
bevatten mkdir --parents
als een meer leesbare alias, maar dit is niet gespecificeerd in POSIX/Single Unix Specification en niet beschikbaar op veel gangbare platformen zoals macOS, diverse BSDs, en diverse commerciële Unixen, dus het zou vermeden moeten worden.
Als u een foutmelding wilt als bovenliggende directories niet bestaan, en de directory wilt aanmaken als hij niet bestaat, dan kunt u eerst test
op het bestaan van de directory:
[ -d foo ] || mkdir foo
Dit zou moeten werken:
$ mkdir -p dir
of:
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
die de map zal aanmaken als hij niet bestaat, maar u waarschuwt als de naam van de map die u probeert aan te maken al in gebruik is door iets anders dan een map.