Hoe mkdir alleen te gebruiken als een map nog niet bestaat?

Ik ben een shellscript aan het schrijven om onder de KornShell (ksh) op AIX te draaien. Ik wil de opdracht mkdirgebruiken 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 mkdirgeeft 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/baren foo/bar/bazals ze niet bestaan.

Sommige implementaties zoals GNU mkdirbevatten mkdir --parentsals 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 testeerst 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 foowerkt 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 -pte 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 ifverklaring om te controleren of de map bestaat of niet. Als het niet wordt uitgegooid, maakt u vervolgens de map.

  1. DIR = / Home / Dir_Name

    if [ ! -d $dir ]
    then
         mkdir $dir
    else
         echo "Directory exists"
    fi
    
  2. 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

Other episodes