Comment mkdir seulement si un dir n'existe pas déjà?
j'écris un script shell à exécuter sous le KornShell (ksh) sur AIX. Je voudrais utiliser la commande mkdir
pour créer un répertoire. Mais le répertoire peut déjà exister, auquel cas je ne veux rien faire. Donc je veux soit tester pour voir que le répertoire n'existe pas, soit supprimer l'erreur "File exists" que mkdir
lance quand il essaie de créer un répertoire existant.
des idées sur la meilleure façon de faire cela?
13 réponses
Essayer mkdir -p
:
mkdir -p foo
notez que cela créera aussi des répertoires intermédiaires qui n'existent pas; par exemple,
mkdir -p foo/bar/baz
va créer des répertoires foo
, foo/bar
, et foo/bar/baz
s'ils n'existent pas.
Si vous voulez une erreur lors de répertoires parents n'existent pas, et que vous voulez créer le répertoire s'il n'existe pas, alors vous pouvez test
de l'existence du répertoire:
[ -d foo ] || mkdir foo
cela devrait fonctionner:
$ mkdir -p dir
ou:
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
qui créera le répertoire s'il n'existe pas, mais vous avertira si le nom du répertoire que vous essayez de créer est déjà utilisé par quelque chose d'autre qu'un répertoire.
Définition complexe répertoire des arbres avec une seule commande
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Si vous ne voulez pas afficher de message d'erreur:
[ -d newdir ] || mkdir newdir
si vous voulez afficher votre propre message d'erreur:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
La vieille essayé et vrai
mkdir /tmp/qq >/dev/null 2>&1
fera ce que vous voulez sans aucune des conditions de course que beaucoup d'autres solutions ont.
parfois, les solutions les plus simples (et les plus laides) sont les meilleures.
mkdir foo
fonctionne même si le répertoire existe.
Pour le faire fonctionner que si le répertoire nommé "toto" n'existe pas, essayez d'utiliser le -p
pavillon.
exemple: -
mkdir -p foo
cela ne créera le répertoire nommé" foo " que s'il n'existe pas. :)
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
ou si vous voulez vérifier l'existence en premier:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-e est l'existence d'essai pour korn shell.
vous pouvez également essayer de googler un manuel korn shell.
mkdir ne supporte plus l'option-p sur les systèmes Windows 8+.
vous pouvez utiliser ceci:
IF NOT EXIST dir_name MKDIR dir_name
vous pouvez soit utiliser If loop pour vérifier si directory existe ou non, s'il ne sort pas que créer le répertoire.
1) dir= / home /dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2) Vous pouvez utiliser l'option mkdir avec-p pour créer un répertoire. Il va vérifier si le répertoire n'est pas disponible, il sera.
mkdir -p $dir
mkdir-p permet également de créer la structure arborescente du répertoire. Si vous souhaitez créer le parent et l'enfant les répertoires utilisant la même commande, peuvent opter pour mkdir-p
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
C'est une fonction simple (shell bash) qui permet de créer un répertoire s'il n'existe pas.
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d ]
then
mkdir -p
fi
}
vous pouvez appeler la fonction ci-dessus comme:
createDirectory/tmp/fooDir / BarDir
ce qui précède crée Fooder et BarDir s'ils n'existent pas. Notez l'option "-p " dans la commande mkdir qui crée les répertoires de façon récursive. Espérons que cette aide.
mkdir -p sam
- mkdir = Faire un Répertoire
- - P = --parents
- (pas d'erreur si existant, faire des répertoires parents si nécessaire)