Comment vérifier si un fichier ou un répertoire existe dans Bash

青灯夜游
Libérer: 2019-03-22 16:33:49
original
4849 Les gens l'ont consulté

Souvent, lors de l'écriture de scripts Shell, vous devez effectuer des opérations en fonction de l'existence ou non d'un fichier. Alors comment vérifier si le fichier existe ? L'article suivant vous montrera comment utiliser la commande test pour vérifier si un fichier ou un répertoire existe dans Bash. J'espère que cela vous sera utile.

Comment vérifier si un fichier ou un répertoire existe dans Bash

commande test

Dans Bash, vous pouvez utiliser la commande test pour vérifier si un fichier existe et identifiez le type de fichier.

La commande test prend l'une des formes de syntaxe suivantes :

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Copier après la connexion

Si vous souhaitez que votre script soit portable, vous devez préférer utiliser l'ancienne commande test [, disponible sur tous Coquilles POSIX. Une nouvelle version mise à niveau de la commande test [[ (doubles crochets) est prise en charge sur la plupart des systèmes modernes utilisant bash, zsh et ksh comme shell par défaut.

Opérateurs de fichiers de la commande test

La commande test comprend les opérateurs de fichiers suivants, permettant de tester des types spécifiques de fichiers :

Quantity -b FILE : vrai si FILE existe et est un fichier spécial de bloc.

Quantity -c FILE : Vrai si FILE existe et est un fichier de caractères spéciaux.

Quantity -d FILE : Vrai si FILE existe et est un répertoire.

Quantity -e FILE : Vrai si FILE existe et est un fichier, quel que soit son type (nœud, répertoire, socket, etc.).

Quantity -f FILE : Vrai si FILE existe et est un fichier normal (pas un répertoire ou un périphérique).

● -G FILE : Vrai si FILE existe et est dans le même groupe que l'utilisateur exécutant la commande.

Quantity -h FILE : Vrai si FILE existe et est un lien symbolique.

● -g FILE : Vrai si FILE existe et que l'indicateur set-group-id (sgid) est défini.

Quantity -k FILE : Vrai si FILE existe et que l'indicateur sticky bit est défini.

Quantity -L FILE : Vrai si FILE existe et est un lien symbolique.

● -O FILE : Vrai si FILE existe et appartient à l'utilisateur exécutant la commande.

Quantity -p FILE : Vrai si FILE existe et est un tube.

Quantity -r FILE : Vrai si FILE existe et est lisible.

Quantity -S FILE : Vrai si FILE existe et est un socket.

Quantity -s FILE : Vrai si FILE existe et a une taille non nulle.

● -u FILE : True s'il existe et que les indicateurs set-user-id (suid) sont définis.

Quantity -w FILE : Vrai si FILE existe et est accessible en écriture.

Quantity -x FILE : Vrai si FILE existe et est exécutable.

Comment vérifier si un fichier existe ?

Lors de la vérification si un fichier existe, les opérateurs FILE les plus couramment utilisés sont -e et -f. Le premier opérateur vérifiera si le fichier existe quel que soit le type de fichier ; le deuxième opérateur ne retournera vrai que si le fichier est un fichier normal (pas un répertoire ou un périphérique).

Lors de la vérification si un fichier existe, l'option la plus lisible consiste à utiliser la commande test en conjonction avec une instruction if. L'un des extraits de code suivants vérifiera si le fichier /etc/resolv.conf existe :

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exist"
fi
Copier après la connexion
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
fi
Copier après la connexion
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exist"
fi
Copier après la connexion

Si vous souhaitez effectuer différentes actions selon que le fichier existe, utilisez simplement une structure if/then :

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
else 
    echo "$FILE does not exist"
fi
Copier après la connexion

Remarque : Utilisez toujours des guillemets doubles pour éviter les problèmes lorsque vous travaillez avec des fichiers contenant des espaces dans leurs noms.

Vous pouvez également utiliser la commande test sans instruction if. La commande après l'opérateur && ne sera exécutée que si l'état de sortie de la commande de test est vrai,

test -f /etc/resolv.conf && echo "$FILE exist"
Copier après la connexion
[ -f /etc/resolv.conf ] && echo "$FILE exist"
Copier après la connexion
[[ -f /etc/resolv.conf ] && echo "$FILE exist"
Copier après la connexion

Si vous souhaitez exécuter une série de commandes après l'opérateur &&, juste Placez simplement la commande entre accolades séparées par ";" ou "&&".

[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }
Copier après la connexion

Contrairement à &, l'instruction qui suit l'opérateur || n'est exécutée que lorsque l'état de sortie de la commande test est faux.

[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"
Copier après la connexion

Comment vérifier si un répertoire existe ?

L'opérateur -d permet de tester si un fichier est un répertoire.

Par exemple, pour vérifier si le répertoire /etc/docker existe, vous utiliserez :

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory"
fi
Copier après la connexion
[ -d /etc/docker ] && echo "$FILE is a directory"
Copier après la connexion

De même, vous pouvez également utiliser des doubles crochets [[ au lieu d'un simple parenthèse [.

Comment vérifier si un fichier n'existe pas ?

Comme dans de nombreuses autres langues, ça marche ! (point d'exclamation) Opérateur NON logique pour annuler l'expression de test :

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE exist and it is a directory"
fi
Copier après la connexion

Comme ci-dessus :

[ ! -f /etc/docker ] || echo "$FILE does not exist"
Copier après la connexion

Comment vérifier si plusieurs fichiers existent ?

Si plusieurs fichiers existent, vous pouvez utiliser -a (ou &&with[]) pour tester au lieu d'utiliser des constructions if/else imbriquées complexes :

FILE=/etc/docker
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
Copier après la connexion
FILE=/etc/docker
if [ -f /etc/resolv.conf && -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
Copier après la connexion

Variante équivalente sans instruction IF :

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "both files exist"
Copier après la connexion
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "both files exist"
Copier après la connexion

Tutoriels vidéo associés recommandés : "Tutoriel Linux"

C'est tout. L'intégralité du contenu de cet article est j'espérais être utile à l'étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal