Ik ben een shellscript aan het schrijven om onder de KornShell (ksh) op AIX te draaien. Ik wil de opdracht mkdir
gebruiken om een map aan te maken. Maar de directory kan al bestaan, in welk geval ik niets wil doen. Dus ik wil ofwel testen om te zien of de map niet bestaat, of de “Bestand bestaat”-fout onderdrukken die mkdir
geeft wanneer het probeert een bestaande map aan te maken.
Hoe kan ik dit het beste doen?
Antwoord 1, autoriteit 100%
Probeer mkdir -p
:
mkdir -p foo
Merk op dat hierdoor ook tussenliggende mappen worden gemaakt die niet bestaan; bijvoorbeeld,
mkdir -p foo/bar/baz
maakt mappen foo
, foo/bar
en foo/bar/baz
als ze niet bestaan.
Sommige implementaties zoals GNU mkdir
bevatten mkdir --parents
als een beter leesbare alias, maar dit wordt niet gespecificeerd in de POSIX/Single Unix-specificatie en is niet beschikbaar op veel algemene platforms zoals macOS, verschillende BSD’s en verschillende commerciële Unixen, dus het moet worden vermeden.
Als u een foutmelding wilt wanneer de bovenliggende mappen niet bestaan, en u wilt de map maken als deze niet bestaat, dan kunt u test
eerst op het bestaan van de directory:
[ -d foo ] || mkdir foo
Antwoord 2, autoriteit 5%
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 maken als deze niet bestaat, maar u waarschuwt als de naam van de map die u probeert te maken al in gebruik is door iets anders dan een map.
Antwoord 3, autoriteit 2%
Gebruik de vlag -p.
man mkdir
mkdir -p foo
Antwoord 4, autoriteit 2%
Definiëren van complexe directorystructuren met één commando
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Antwoord 5
Als u geen foutmelding wilt weergeven:
[ -d newdir ] || mkdir newdir
Als je je eigen foutmelding wilt tonen:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
Antwoord 6
Het oude beproefde
mkdir /tmp/qq >/dev/null 2>&1
zal doen wat je wilt met geen van de race-omstandigheden die veel van de andere oplossingen hebben.
Soms zijn de eenvoudigste (en lelijkste) oplossingen de beste.
Antwoord 7
mkdir foo
werkt zelfs als de directory bestaat.
Om het alleen te laten werken als de map met de naam “foo” niet bestaat, kunt u proberen de vlag -p
te gebruiken.
Voorbeeld:
mkdir -p foo
Hiermee wordt de map alleen gemaakt met de naam “FOO” als deze niet bestaat. 🙂
8
MKDIR ondersteunt geen ondersteuning voor -P-schakelaar op Windows 8+ Systems.
U kunt dit gebruiken:
IF NOT EXIST dir_name MKDIR dir_name
9
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
10
U kunt een if
verklaring om te controleren of de map bestaat of niet. Als het niet wordt uitgegooid, maakt u vervolgens de map.
-
DIR = / Home / Dir_Name
if [ ! -d $dir ] then mkdir $dir else echo "Directory exists" fi
-
U kunt directory MKDIR met -P-optie gebruiken om een map te maken. Het zal controleren of de map niet beschikbaar is, het zal.
mkdir -p $dir
MKDIR -P maakt het ook mogelijk om de boomstructuur van de map te maken. Als u de mappen van de ouder- en kindermappen met dezelfde opdracht wilt maken, kan u op MKDIR -P
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
11
of als u eerst wilt controleren op het bestaan:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-E is de bestaande test voor Kornshell .
U kunt ook een Moogling A Kornshell-handleiding proberen.
12
Dit is een eenvoudige functie (bash shell) waarmee u een map kunt maken als deze niet bestaat.
#------------------------------------------#
# Create a directory if it does not exist. #
#------------------------------------------#
# Note the "-p" option in the mkdir #
# command which creates directories #
# recursively. #
#------------------------------------------#
createDirectory() {
mkdir -p -- "$1"
}
U kunt de bovenstaande functie bellen als:
Acardirectory “$ (MKTEMP -D DIR-voorbeeld.xxxxx) / foodir / bardir”
Het bovenstaande maakt foodir en bardir als ze niet bestaan. Let op de optie “-P” in het MKDIR-commando dat recursief mappen maakt.
13
mkdir -p sam
- mkdir = map map
- -P = – Parens
- (geen foutmelding als bestaand, beurt mappen als dat nodig is)
14
if [ !-d $dirName ];then
if ! mkdir $dirName; then # Shorter version. Shell will complain if you put braces here though
echo "Can't make dir: $dirName"
fi
fi
15
Eenvoudig, stil en dodelijk:
mkdir -p /my/new/dir >/dev/null 2>$1