J'écris un script Shell à exécuter sous KornShell (ksh) sous AIX. J'aimerais 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. Je souhaite donc soit vérifier que le répertoire n'existe pas, soit supprimer l'erreur "Le fichier existe" générée par mkdir
lorsqu'elle tente de créer un répertoire existant.
Des idées sur la meilleure façon de faire cela?
Essayez mkdir -p
:
mkdir -p foo
Notez que cela créera également tous les répertoires intermédiaires qui n'existent pas. par exemple,
mkdir -p foo/bar/baz
créera des répertoires foo
, foo/bar
et foo/bar/baz
s'ils n'existent pas.
Certaines implémentations telles que GNU mkdir
incluent mkdir --parents
en tant qu'alias plus lisible, mais cela n'est pas spécifié dans la spécification POSIX/Single Unix et n'est pas disponible sur de nombreuses plates-formes courantes telles que macOS, divers BSD et divers Unix commerciaux. évité.
Si vous voulez une erreur lorsque les répertoires parents n'existent pas et que vous voulez créer le répertoire s'il n'existe pas, vous pouvez alors test
pour 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 autre chose qu'un répertoire.
Utilisez le drapeau -p.
man mkdir
mkdir -p foo
Définir des arborescences complexes 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 souhaitez afficher votre propre message d'erreur:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
Le vieux essayé et vrai
mkdir /tmp/qq >/dev/null 2>&1
fera ce que vous voulez avec aucune des conditions de course de nombreuses solutions.
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 uniquement si le répertoire nommé "foo" n'existe pas, essayez d'utiliser l'indicateur -p
.
Exemple :-
mkdir -p foo
Cela créera le répertoire nommé "foo" seulement 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 au préalable:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-e est le test exist pour korn Shell.
Vous pouvez également essayer de googler un manuel de Shell Korn.
mkdir ne prend plus en charge le commutateur -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 le répertoire existe ou non, s'il ne existe pas, créez le répertoire.
1) dir =/home/dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2) Vous pouvez utiliser le répertoire mkdir avec l'option -p pour créer un répertoire. Il vérifiera si le répertoire n'est pas disponible, il le fera.
mkdir -p $dir
mkdir -p permet également de créer l'arborescence du répertoire. Si vous voulez créer les répertoires parent et enfant en utilisant la même commande, vous pouvez choisir mkdir -p
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
mkdir -p sam
C'est une fonction simple (bash Shell) qui vous permet de créer un répertoire s'il n'existe pas.
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}
Vous pouvez appeler la fonction ci-dessus en tant que:
createDirectory/tmp/fooDir/BarDir
Ce qui précède crée fooDir et BarDir s’ils n’existent pas. Notez l’option "-p" dans la commande mkdir qui crée des répertoires de manière récursive. J'espère que cela t'aides.
Référence à la page de manuel man mkdir
pour l’option -p
-p, --parents
no error if existing, make parent directories as needed
qui créera tous les répertoires dans un chemin donné, s’il existe ne génère pas d’erreur sinon il crée tous les répertoires de gauche à droite dans le chemin donné Essayez la commande ci-dessous. les répertoires newdir
et anotherdir
n'existent pas avant l'exécution de cette commande
Usage correct
mkdir -p /tmp/newdir/anotherdir
Après avoir exécuté la commande, vous pouvez voir newdir
et anotherdir
créés sous/tmp. Vous pouvez émettre cette commande autant de fois que vous le souhaitez, la commande a toujours exit(0)
. C'est pour cette raison que la plupart des gens utilisent cette commande dans les scripts Shell avant d'utiliser ces chemins d'accès réels.