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

Linux Discussion :

[Bash] Exécuter des fichiers puis les supprimer


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Bash] Exécuter des fichiers puis les supprimer
    Bonjour.

    Je dois faire un script bash qui permet :
    - Récupérer les fichiers d'un ftp dans un dossier local
    - Lire et exécuter ces fichiers
    - Une fois exécutés, supprimer ces fichiers

    Pour réaliser mon test, j'ai créé un serveur FTP sur un Windows XP. Le script est exécuté sur une VM Ubuntu. Les deux machines sont sur le même réseau.

    Je tiens à préciser que je débute dans ce domaine (shell bash). Pour le moment, j'ai réussi à faire ceci :

    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
    18
    19
    20
    21
    22
    #!/bin/bash
     
    echo "Verification du repertoire de destination"
    if [ -d "/$HOME/test" ]; then
    	echo "Le repertoire existe deja"
    else
    	mkdir /$HOME/test
    	echo "Le repertoire a ete cree"
    fi
    echo "Acces au répertoire"
    cd /$HOME/test
    echo "Connexion au serveur FTP et recuperation des fichiers"
    wget -r ftp://user:mdp@ipserveurftp
    echo "Fichiers presents dans le repertoire local"
    ls
    echo "Execution des fichiers"
    for fic in $(ls .)
    do
       ${fic}
    done
    echo "Suppression des fichiers executes"
    rm -rf *
    Bon bien entendu, seul la création du dossier fonctionne pour le moment. Pouvez-vous m'aider à voir ce qui ne va pas ?

    En vous remerciant d'avance.

    Bien à vous.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,

    $HOME se développe en /home/$USER, donc ce n'est pas la peine d'ajouter un / devant.

    tu devrais utiliser le développement des chemins plutôt que ls pour la boucle for.
    les fichiers doivent être rendus exécutables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    testDir="$HOME/test"
    for f in "$testDir"/*
    do chmod +x "$f"
       "$f"
    done
    rm -rf "$testDir"
    veille à bien mettre les variables entre guillemets, au cas où un fichier aurait un nom contenant un espace, ou autre.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour.

    Un grand merci pour ton aide, car ça fonctionne très bien.
    Voici le script maintenant :
    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
    18
    19
    20
    21
    #!/bin/bash
     
    echo "Verification du repertoire de destination"
    if [ -d "$HOME/test" ]; then
    	echo "Le repertoire existe deja"
    else
    	mkdir $HOME/test
    	echo "Le repertoire a ete cree"
    fi
    echo "Connexion au serveur FTP et recuperation des fichiers"
    lftp ftp://user:mdp@ipserveurftp -e "mirror -e / $HOME/test ; quit"
    echo "Acces au repertoire"
    cd $HOME/test
    echo "Execution des fichiers"
    testDir="$HOME/test"
    for f in "$testDir"/*
    do chmod +x "$f"
    	"$f"
    done
    echo "Suppression des fichiers"
    rm -rf "$testDir"
    Autres question :
    - Peut-on faire en sorte de transférer les fichiers du FTP sans seulement les copier ? Car de cette manière, les fichiers restent sur le serveur FTP. Je voudrais qu'ils soient transférés et supprimés du serveur FTP.
    - Pourquoi la commande wget ne fonctionne pas ? Pourtant elle devrait, car là je suis obligé d'utiliser lftp
    - Enfin, ce script est destiné à exécuter des fichiers (requêtes SQL) pour Oracle. Est-ce que ça fonctionnera ?

    Bien à toi.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    - Peut-on faire en sorte de transférer les fichiers du FTP sans seulement les copier ? Car de cette manière, les fichiers restent sur le serveur FTP. Je voudrais qu'ils soient transférés et supprimés du serveur FTP.
    ? le client ftp de base dispose d'une commande delete, mais je ne connais pas lftp
    Il faudrait regarder le man.
    - Pourquoi la commande wget ne fonctionne pas ? Pourtant elle devrait, car là je suis obligé d'utiliser lftp
    utilise le mode verbeux, et un fichier de log.
    - Enfin, ce script est destiné à exécuter des fichiers (requêtes SQL) pour Oracle. Est-ce que ça fonctionnera ?
    ça dépend du contenu des fichiers.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ? le client ftp de base dispose d'une commande delete, mais je ne connais pas lftp
    Il faudrait regarder le man.
    Alors j'ai trouvé une petite solution pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lftp ftp://user:mdp@ipserveurftp -e "mget -E *.sql ; quit"
    Où mget -E *.sql récupère tous les SQL et les supprime du serveur FTP

    utilise le mode verbeux, et un fichier de log.
    Ok

    ça dépend du contenu des fichiers.
    Normalement ces fichiers SQL vont insérer des données dans la base Oracle ou mettre à jour certaines données.

    Pour le moment mon script ressemble à ça (et se trouve dans $HOME/test) :
    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
    #!/bin/bash
     
    echo "Connexion au serveur FTP et recuperation des fichiers"
    lftp ftp://user:mdp@ipserveurftp -e "mget -E *.sql ; quit"
    echo "Acces au repertoire"
    cd $HOME/test
    echo "Fichiers presents dans le repertoire local"
    ls
    echo "Execution des fichiers"
    testDir="$HOME/test"
    for f in "$testDir"/*.sql
    do chmod +x "$f"
    	"$f"
    done
    echo "Suppression des fichiers"
    rm -rf "testDir"/*.sql
    Donc il ne me reste plus qu'à savoir comment exécuter ces fichiers SQL pour une base Oracle.

    Bien à toi.

Discussions similaires

  1. Réponses: 21
    Dernier message: 28/06/2011, 16h20
  2. Supprimer des fichiers sur les bureaux de tous les users ???
    Par proteine1024 dans le forum VBScript
    Réponses: 1
    Dernier message: 01/09/2009, 08h56
  3. Réponses: 1
    Dernier message: 18/01/2009, 09h34
  4. [VB6] exécuter des fichiers gif
    Par motrin dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/08/2006, 12h59
  5. exécution des fichiers index.php
    Par berry dans le forum Apache
    Réponses: 4
    Dernier message: 20/12/2004, 20h29

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