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 :

Création de fichier si non existant


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Par défaut Création de fichier si non existant
    Bonjour,

    J'aimerai savoir comment faire pour créer un fichier si celui ci n'est pas présent dans un repertoire.
    exemple: vérifier dans le répertoire /test/ la présence du fichier titi.txt et si non présent le crée.
    c'est un script ksh que je dois faire enfin essayer , étant comptable je tâtonne

    Merci de vos retours

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 686
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Bonjour,

    pourquoi ksh ?

    en bash :
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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


  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Par défaut
    Dans ton exemple tu créés directement le fichier il me semble mais moi je voudrai juste vérifier que si le fichier titi.txt ne soit pas la le créer

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Quelle différence ?

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Par défaut
    La différence c'est que je cherche à créer le fichier si il n'est pas présent mais si il est présent je ne fais rien

    qqchose comme si titi est la je ne fais rien mais si il n'est pas la je le crée

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    L'un est un "bonnet blanc" et l'autre est un "blanc bonnet".
    Tu m'en diras tant.

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 374
    Par défaut
    c'est la commande touch qu'il te faut. Cela crée un fichier à 0 si le fichier n'existe pas.
    Attention, si le fichier existe, touch modifie son horodatage.

    touch est une commande extérieure au shell. Mais avec un shell, tu peux aussi le faire je pense.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 686
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    touch n'est pas fait pour créer des fichiers.
    il le fait, mais ce n'est pas son rôle, qui est comme tu le dis de modifier l'horodatage d'un fichier.

    la création d'un fichier, qui est rarement nécessaire si on n'a rien à y mettre, se fait avec une simple redirection :pour vérifier qu'un élément (variable, fichier, répertoire...) on utilise la commande test, d'où le help test que j'ai indiqué pour apprendre comment fonctionne cette commande.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 374
    Par défaut
    touch reste plus simple si l'utilisateur se moque de l'horodatage avec une seule commande.

    Sinon, effectivement combinaison du test avec appel >fichier si le fichier n'existe pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 378
    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 378
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ >>foobar
    bash: foobar: est un dossier
    On peut donc dire que le test est obligatoire

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 686
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    touch reste plus simple si l'utilisateur se moque de l'horodatage avec une seule commande.

    Sinon, effectivement combinaison du test avec appel >fichier si le fichier n'existe pas.
    touch, c'est comme cat, en général, i-nu-tile !
    en plus, c'est une commande externe.

    t·o·u·c·h, plus simple que > ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 374
    Par défaut
    t·o·u·c·h, plus simple que > ?
    étant comptable je tâtonne
    Pour quelqu'un n'ayant pas de connaissance Bash,comme un comptable, touch restera plus simple à utiliser que de faire un test + créer le fichier dans un script via >, mais avec les contraintes d'horodatage.

    Pour bomonde, je conclurais par :

    Si tu veux faire un truc à usage unique vite fait, et que tu t'en fiche que la date de titi.txt change, touch sera AMHA la solution la plus adaptée pour toi.
    Si tu vas être amené à faire plusieurs scripts, la solution de N_BAH sera plus adaptée, quitte à tâtonner un peu le temps de l'apprentissage, mais à terme et en terme comptable tu auras un retour sur investissements.

    PS : la commande touch test/titi.txt retournera un message d'erreur si le dossier test n'existe pas. Si il faut s'assurer de l’existence du dossier, c'est la solution de N_BAH qu'il faudra utiliser.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Par défaut
    Bonjour,

    j'ai essayé de créer le script ci-dessous et ça marche lorsque le fichier titi n'est pas présent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/ksh
    cd /test
    if [ -f titi ]
    then
     // exit
    else
    >titi
    fi

    Par contre lorsque le fichier titi est présent il me remonte une erreur ci-dessous

    ./testscript[5]: //: 0403-006 Execute permission denied.
    n'y a t'il pas un moyen qu'il ne remonte pas d'erreur si le fichier est deja présent ?

    Merci de vos retours

  15. #15
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Par défaut
    J'ai trouvé, en retirant les // avant exit cela marche très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/ksh
    cd /test
    if [ -f titi ]
    then
    // exit
    else
    >titi
    fi
    Encore merci pour tous vos retours

    Bonne journée

  16. #16
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Par défaut
    C'est même plus jolie comme ca :o)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/ksh
    if [ -f /flux/STB/in/GCO/prmp.txt ]
    then
    exit
    else
    >prmp.txt
    fi

  17. #17
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 378
    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 378
    Par défaut
    Attention, tu testes l’existence d'un fichier en donnant le chemin complet mais s'il n'existe pas tu crées un fichier dans le répertoire courant...

    Sinon, en plus court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ ! -e /flux/STB/in/GCO/prmp.txt ] && >/flux/STB/in/GCO/prmp.txt
    ou avec un if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ ! -e /flux/STB/in/GCO/prmp.txt ]
    then
      >/flux/STB/in/GCO/prmp.txt
    fi
    Ici, j'utilise -e au lieu de -f car -e vérifie juste si le fichier existe, il ne regarde pas si c'est un répertoire, une socket, ou autre.
    Tandis que -f vérifie que le fichier existe et que c'est un fichier standard

  18. #18
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 686
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Citation Envoyé par chrtophe
    Pour quelqu'un n'ayant pas de connaissance Bash,comme un comptable, touch restera plus simple à utiliser que de faire un test + créer le fichier dans un script via >, mais avec les contraintes d'horodatage.
    mais puisque le comptable pose une condition à la création du fichier

    et puis, on est sur Developpez.com, pas sur Debutant.net !

    les mauvaises habitudes/pratiques, enseignées par égard au (faible) niveau du "questionneur", ont la vie dure.
    il y a assez de sites sur le net, qui propagent ces fausses bonnes solutions.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création de fichier si non présent
    Par PAB/31/SAB dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 27/03/2015, 16h13
  2. Réponses: 1
    Dernier message: 30/05/2011, 01h40
  3. [tFilexist = False] Lire les fichiers non existants dans un tLogRow
    Par mathieu_r dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 11/05/2009, 16h40
  4. Tester la non existence d'un fichier
    Par Pharmacos dans le forum Débuter
    Réponses: 3
    Dernier message: 20/05/2008, 21h25

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