IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Tester l'existence d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Equateur

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Par défaut Tester l'existence d'un fichier
    Salut , en Shell pour tester l’existence d'une chaîne suivant un nom donné (ch1 par ex ) , est ce qui il faut parcourir un répertoire et tester au meme temps (si oui comment on fait ce parcours ) ou on teste directement et ici quelle est l’écriture vraie :

    ou
    2)'test' c'est obligatoire pour faire un test ou comparaison ,ou on peut écrire directement ( -s $fichier par ex sans test -s $fichier )

    et Merci d'avance

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    Quelques mises au point:
    1. [ ] est un raccourci pour la commande test. Il faut des espaces autour des crochets.
    2. -e teste l'existence du fichier alors que -f vérifie que c'est un fichier et non un répertoire.
    3. Quand au parcours du répertoire, je ne comprends ce que cela veux dire. Il teste l'expression que tu lui donne. Point.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Equateur

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Par défaut
    Bonjour et merci pour votre réponse , a propos du parcours , par exemple comment tester si une chaîne ch1 correspond son nom a un fichier dans un répertoire contient des différents fichier de différents nom ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Peux-tu mettres les mots dans le bon ordre. C'est incompréhensible.
    Peux-tu aussi donner un exemple ?

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par coros04 Voir le message
    2)'test' c'est obligatoire pour faire un test ou comparaison ,ou on peut écrire directement ( -s $fichier par ex sans test -s $fichier )
    Salut
    L'option "-s" est une option de la commande "test". C'est la commande "test" qui permet de faire des évaluations diverses en shell et "-s" indique quelle évaluation exactement tu veux faire (ici tester si le fichier existe et est non vide)
    -s tout court ne veut rien dire (il y a tant de commandes qui ont cette option, comment veux-tu que le shell sache de laquelle il s'agit ?????!!!!!!????)

    Pour tes autres question, moi non plus je ne pige pas ce que tu veux dire...

    Citation Envoyé par Flodelarab Voir le message
    ...alors que -f vérifie que c'est un fichier et non un répertoire.
    Raté. Déjà un répertoire c'est d'abord et aussi un fichier.
    Donc l'option "-f" vérifie que c'est un fichier de type "régulier", (par opposition aux fichiers de type répertoire, de type lien, de type socket, de type pipe, de type bloc ou de type caractère)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,
    C'est vrai que la dernière question n'est pas vraiment compréhensible (mais le français n'est pas vraiment la langue officielle de l'équateur ).
    Voici un exemple de test sur fichier "régulier" qui répondra peut-être à ta question sur le parcours de répertoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ ls -R
    .:
    rep1  rep2
     
    ./rep1:
    fic1  fic2  fic3  fic4
     
    ./rep2:
    fic2  fic3  fic4  fic5
    $ echo $ch1
    fic1
    $ [ -f $ch1 ] && echo ok || echo ko
    ko
    $ [ -f rep1/$ch1 ] && echo ok || echo ko
    ok
    $ [ -f rep2/$ch1 ] && echo ok || echo ko
    ko

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ echo $ch1
    fic1
    $ [ -f $ch1 ] && echo ok || echo ko
    ko
    Attention à essayer de donner aussi les bonnes habitudes. Notemment celle de protéger une variable sensée contenir une chaine avec des doubles quottes. Ca évite les petits bugs de ce type...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ unset ch
    $ echo "[$ch]"
    []
    $ test -f $ch && echo "ok" || echo "ko"
    ok
    $ test -d $ch && echo "ok" || echo "ko"
    ok
    $ test -p $ch && echo "ok" || echo "ko"
    ok


    Alors que si on veille à bien protéger sa variable...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ test -f "$ch" && echo "ok" || echo "ko"
    ko
    Ce qui va déjà beaucoup mieux...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Il est vrai que j'aurai pu faire l'effort d'une écriture plus rigoureuse mais le but ici était de montrer la partie "parcours" de sa question et de plus, la variable est définie en absolue.
    Sinon, à bien l'écrire, autant être plus stricte pour éviter d'autres surprises (et ici, je ne parle que de la variable ).
    En gardant l'aborescence précédente et de savoir si le fichier "fic1" existe dans le répertoire rep1 (ce qui est le cas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ ch1="fic"
    $ [ -f "rep1/$ch11" ] && echo ok
    $ [ -f "rep1/${ch1}1" ] && echo ok
    ok
    $ [ -f "rep1/$ch1""1" ] && echo ok
    ok
    La deuxième écriture me semble plus propre, de plus si la valeur de la variable posséde un opérateur que l'on veut exploiter, les guillemets deviennent encombrant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ch1="fi*"
    $ [ -f "rep1/"$ch1"1" ] && echo ok
    ok
    $ [ -f "rep1/$ch11" ] && echo ok
    $ [ -f "rep1/$ch1""1" ] && echo ok
    $ [ -f "rep1/${ch1}1" ] && echo ok
    $ [ -f "rep1/"${ch1}"1" ] && echo ok
    ok
    Comme on peut le voir, les seules écritures correctes sont la première et la dernière et ici les variables ne sont pas protégées par des guillemets.

    Je pense que la bonne écriture est difficile à définir, puisqu'elle dépends tout d'abord du contexte de son utilisation.

Discussions similaires

  1. [FTP] Tester l'existence d'un fichier.
    Par antony dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2006, 18h54
  2. [File]Tester l'existence d'un fichier
    Par florantine dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 23/11/2005, 10h45
  3. tester l existence d un fichier sous turbo pascal
    Par Newllite dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/01/2004, 12h47
  4. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo