Question Comment savoir si un fichier ordinaire n'existe pas dans Bash?


J'ai utilisé le script suivant pour voir si un fichier existe:

#!/bin/bash

FILE=$1     
if [ -f $FILE ]; then
   echo "File $FILE exists."
else
   echo "File $FILE does not exist."
fi

Quelle est la syntaxe correcte à utiliser si je veux seulement vérifier si le fichier ne pas exister?

#!/bin/bash

FILE=$1     
if [ $FILE does not exist ]; then
   echo "File $FILE does not exist."
fi

2507
2018-03-12 14:48


origine


Réponses:


le tester commande ([ ici) a un opérateur logique "not" qui est le point d'exclamation (semblable à beaucoup d'autres langues). Essaye ça:

if [ ! -f /tmp/foo.txt ]; then
    echo "File not found!"
fi

3520
2018-03-12 14:50



Test de fichier Bash

-b filename - Bloquer le fichier spécial
-c filename - Fichier de caractères spéciaux
-d directoryname - Vérifier l'existence du répertoire
-e filename - Vérifier l'existence du fichier, quel que soit le type (noeud, répertoire, socket, etc.)
-f filename - Vérifier l'existence d'un fichier régulier et non un répertoire
-G filename - Vérifier si le fichier existe et appartient à un ID de groupe efficace
-G filename set-group-id - Vrai si le fichier existe et est défini par l'ID de groupe
-k filename - Mors collant
-L filename - Lien symbolique
-O filename - Vrai si le fichier existe et appartient à l'ID utilisateur effectif
-r filename - Vérifier si le fichier est lisible
-S filename - Vérifiez si le fichier est socket
-s filename - Vérifiez si le fichier est de taille différente de zéro
-u filename - Vérifier si le bit set-user-id du fichier est positionné
-w filename - Vérifier si le fichier est accessible en écriture
-x filename - Vérifier si le fichier est exécutable

Comment utiliser:

#!/bin/bash
file=./file
if [ -e "$file" ]; then
    echo "File exists"
else 
    echo "File does not exist"
fi 

UNE Expression de test peut être annulé en utilisant le ! opérateur

#!/bin/bash
file=./file
if [ ! -e "$file" ]; then
    echo "File does not exist"
else 
    echo "File exists"
fi 

427
2018-01-16 14:25



Vous pouvez annuler une expression avec "!":

#!/bin/bash
FILE=$1

if [ ! -f "$FILE" ]
then
    echo "File $FILE does not exist"
fi

La page de manuel correspondante est man test ou équivalent, man [ -- ou help test ou help [ pour la commande bash intégrée.


250
2018-03-12 14:50



[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"

En outre, il est possible que le fichier soit un lien symbolique brisé, ou un fichier non-régulier, comme par ex. une prise, un appareil ou fifo. Par exemple, pour ajouter une vérification des liens symboliques rompus:

if [[ ! -f $FILE ]]; then
    if [[ -L $FILE ]]; then
        printf '%s is a broken symlink!\n' "$FILE"
    else
        printf '%s does not exist!\n' "$FILE"
    fi
fi

110
2018-03-12 14:52



Il est important de mentionner que si vous devez exécuter une seule commande, vous pouvez abréger

if [ ! -f "$file" ]; then
    echo "$file"
fi

à

test -f "$file" || echo "$file"

ou

[ -f "$file" ] || echo "$file"

80
2017-08-11 09:15



Je préfère faire le one-liner suivant, en POSIX format compatible shell:

$ [ -f "/$DIR/$FILE" ] || echo "$FILE NOT FOUND"

$ [ -f "/$DIR/$FILE" ] && echo "$FILE FOUND"

Pour quelques commandes, comme je le ferais dans un script:

$  [ -f "/$DIR/$FILE" ] || { echo "$FILE NOT FOUND" ; exit 1 ;}

Une fois que j'ai commencé à faire cela, j'utilise rarement la syntaxe entièrement typée !!


56
2017-10-18 16:09



Pour tester l'existence d'un fichier, le paramètre peut être l'un des suivants:

-e: Returns true if file exists (regular file, directory, or symlink)
-f: Returns true if file exists and is a regular file
-d: Returns true if file exists and is a directory
-h: Returns true if file exists and is a symlink

Tous les tests ci-dessous s'appliquent aux fichiers, répertoires et liens symboliques habituels:

-r: Returns true if file exists and is readable
-w: Returns true if file exists and is writable
-x: Returns true if file exists and is executable
-s: Returns true if file exists and has a size > 0

Exemple de script:

#!/bin/bash
FILE=$1

if [ -f "$FILE" ]; then
   echo "File $FILE exists"
else
   echo "File $FILE does not exist"
fi

36
2017-12-19 12:47