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 :

Script shell commande rm


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Script shell commande rm
    Bonjour

    Je debute en programmation de script shell, je dois ecrire un script qui supprime toute la sous hierarchie d'un repertoire, sans utiliser la commande rm -r.
    Mon script s'appel suppr.sh et prend en argument le repertoire a effacer.
    le repertoire sur lequel je veux tester le script s'appel essai,
    ls essai donne essai2/ f1 f2 f3,essai2 est un repertoire et f1 f2 f3 des fichiers.

    voici le script que j'ai ecrit
    :
    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
    #! /bin/sh
    # suppr.sh
     
    echo "Debut de la suppression"
    if [ -d "$1" ];then 
     
    for i in `ls $1`;do
        if [ -d "$i" ];then
              echo "Suppression $i"
    	 ./suppr.sh $i
        else 
             echo "Suppression $i"
    	`rm -f $i`
        fi
     
    done
     
    fi	
    echo "Fin de la suppression"
    Le probleme c 'est que rien ne s'efface, mais sur la sortie standard j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Debut de la suppression
    Suppression essai2
    Suppression f1
    Suppression f2
    Suppression f3
    Fin de la suppression
    Je ne comprend pas pourquoi les commandes echo affiche leurs resultat mais pas les commandes de suppressions.

    Je suis vraiment perdu.

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    pourquoi utilises-tu des backquotes autour de ta commande rm ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Meme si je retire les backquotes, ca ne marche pas.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    comme tu le fais remarquer dans ton premier message, la sortie de ls est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls essai
    essai2  f1  f2  f3
    ce qui n'indique pas le chemin vers les fichiers

    Essaie avec
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Le genre de script que tu veux faire est assez dangereux, tu pourrais supprimer des fichiers que tu ne voudrais pas, il sera donc a utiliser avec précaution.


    Du point de vue technique, pourquoi ne pas utiliser find?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  | xargs rm -f
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  -exec rm -f {} \; -print
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Le genre de script que tu veux faire est assez dangereux, tu pourrais supprimer des fichiers que tu ne voudrais pas, il sera donc a utiliser avec précaution.


    Du point de vue technique, pourquoi ne pas utiliser find?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  | xargs rm -f
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  -exec rm -f {} \; -print
    C'est bien évidemment la meilleure solution. Mais comme il semble s'agir d'un TP pour lui apprendre à maniper les scripts récursifs et la compréhension du positionnement dans l'arborescence....
    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]

  7. #7
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'est bien évidemment la meilleure solution. Mais comme il semble s'agir d'un TP pour lui apprendre à maniper les scripts récursifs et la compréhension du positionnement dans l'arborescence....
    il a dit que c'etait un TP?, pas vu
    Je ne suis pas certain qu'un prof filerai cela en TP, il aurait tendance à choisir des commandes moins destructrices pour limiter les risques, en tout cas au début.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci a tous
    En effet c' est un exo de TP et j'apprecie l'aide que vous m'avez apporter.

    Encore merci

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    il a dit que c'etait un TP?, pas vu
    C'est pas écrit texto mais bon, ça me semblait bien cadrer avec un TP quoi. Sinon pourquoi refuser le rm -r ???

    Citation Envoyé par jabbounet Voir le message
    Je ne suis pas certain qu'un prof filerai cela en TP, il aurait tendance à choisir des commandes moins destructrices pour limiter les risques, en tout cas au début.
    Oui moi aussi. Un simple ls -l du fichier aurait largement suffi.

    Citation Envoyé par JoneZy Voir le message
    En effet c' est un exo de TP et j'apprecie l'aide que vous m'avez apporter.
    Ce qu'il faut surtout que tu piges bien, c'est que comme l'a dit N_BaH, si tu as un dossier "toto" qui contient x, y et z et que tu fais "for i in `ls toto/*`", tu récupèreras les chaines "x", "y" et "z" alors que les fichiers correspondants se nomment en réalité "toto/x", "toto/y" et "toto/z" (ne jamais négliger l'endroit où tu te trouves quand le script s'exécute quoi)
    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]

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    ok, merci Sve@r pour tes conseils

  11. #11
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'est pas écrit texto mais bon, ça me semblait bien cadrer avec un TP quoi. Sinon pourquoi refuser le rm -r ???
    Effectivement, je me demande combien d'élèves vont détruire le contenu de leur compte avec cet exo....

    Oui moi aussi. Un simple ls -l du fichier aurait largement suffi.
    en plus ça cadre mieux avec l'aspect débutant, pas de punition en cas de fausse manip.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    en plus ça cadre mieux avec l'aspect débutant, pas de punition en cas de fausse manip.
    peut-être que justement la "pédagogie" du prof est là ??

    Je me souviens (sniff.. il y a trèèèèèèès longtemps) être responsable d'un prog de traitements d'images sur un PDP 11/23 (64 k data 64 k mémoire ), et du coup être obligé de mixer Fortran et assembleur.. Et faire (involontairement bien sûr) l'équivalent d'un "rm /" ....

    Et ne pas comprendre (les premières fois) pourquoi il me fallait redescendre tout le système....


    ça m'a pas mal appris à être prudent
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    peut-être que justement la "pédagogie" du prof est là ??

    Je me souviens (sniff.. il y a trèèèèèèès longtemps) être responsable d'un prog de traitements d'images sur un PDP 11/23 (64 k data 64 k mémoire ), et du coup être obligé de mixer Fortran et assembleur.. Et faire (involontairement bien sûr) l'équivalent d'un "rm /" ....

    Et ne pas comprendre (les premières fois) pourquoi il me fallait redescendre tout le système....


    ça m'a pas mal appris à être prudent
    Moi, j'ai eu aussi mon rm fou. J'avais l'habitude, sur ma sun, de nettoyer régulièrement /tmp.
    Donc je m'y connectais et tapais
    Un jour, j'ai voulu aller plus vite et j'ai tapé Et là, la commande ne m'a pas rendu la main. Je me suis demandé "mais que se passe-t-il ?" et là, j'ai réalisé que dans "/tmp/.*" il y avait aussi "/tmp/.."
    Tchao mon système
    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]

  14. #14
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    c'est clair que de faire un suppression de fichier un peu plus destructrice que prévu à du arriver à beaucoup de personnes.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    peut-être que justement la "pédagogie" du prof est là ??

    Je me souviens (sniff.. il y a trèèèèèèès longtemps) être responsable d'un prog de traitements d'images sur un PDP 11/23 (64 k data 64 k mémoire ), et du coup être obligé de mixer Fortran et assembleur.. Et faire (involontairement bien sûr) l'équivalent d'un "rm /" ....

    Et ne pas comprendre (les premières fois) pourquoi il me fallait redescendre tout le système....


    ça m'a pas mal appris à être prudent


    Dans l'enoncer de l'exercice il est précisé de faire le script dans un repertoire particulier qui nous a été fournis exprès pour l'exercice.
    Les erreurs de manipulation etait donc sans gravité.

  16. #16
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par JoneZy Voir le message
    Dans l'enoncer de l'exercice il est précisé de faire le script dans un repertoire particulier qui nous a été fournis exprès pour l'exercice.
    Les erreurs de manipulation etait donc sans gravité.
    sauf si par inadvertance :
    • tu change de repertoire (fausse manip)
    • le script script ne va pas ou tu le souhaite (remonté accidentelle de l'arborescence)
    • le script se met à suivre un lien symbolique vers un repertoire système
    • la commande rm de ton script est erroné et insère un espae ou il ne faut pas (rm . /*.* par exemple)
    • ...


    bref cela peu tenir à peu de chose parfois
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/11/2009, 11h09
  2. script shell et utilisation d'output de commandes
    Par luckyvae dans le forum Linux
    Réponses: 1
    Dernier message: 06/04/2009, 10h49
  3. Lancer une commande Perl dans un script Shell
    Par Ryo_san dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/06/2008, 11h01
  4. Réponses: 2
    Dernier message: 27/02/2006, 15h59

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