+ Répondre à la discussion
Affichage des résultats 1 à 16 sur 16
  1. #1
    Invité régulier
    Inscrit en
    décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 22
    Points : 7
    Points
    7

    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 :
    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 :
    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
    Inscrit en
    février 2008
    Messages
    3 546
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 3 546
    Points : 9 260
    Points
    9 260

    Par défaut

    pourquoi utilises-tu des backquotes autour de ta commande rm ?

  3. #3
    Invité régulier
    Inscrit en
    décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 22
    Points : 7
    Points
    7

    Par défaut

    Meme si je retire les backquotes, ca ne marche pas.

  4. #4
    Modérateur
    Avatar de N_BaH
    Inscrit en
    février 2008
    Messages
    3 546
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 3 546
    Points : 9 260
    Points
    9 260

    Par défaut

    comme tu le fais remarquer dans ton premier message, la sortie de ls est :
    Code :
    1
    2
    ls essai
    essai2  f1  f2  f3
    ce qui n'indique pas le chemin vers les fichiers

    Essaie avec

  5. #5
    Expert Confirmé Avatar de jabbounet
    Homme Profil pro frederic frances
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 911
    Détails du profil
    Informations personnelles :
    Nom : Homme frederic frances
    Âge : 39

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 911
    Points : 2 968
    Points
    2 968

    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 :
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  | xargs rm -f
    ou
    Code :
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  -exec rm -f {} \; -print

  6. #6
    Expert Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 684
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 684
    Points : 10 618
    Points
    10 618

    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 :
    1
    2
    3
     
    #!/bin/sh
    find $1 -type f  | xargs rm -f
    ou
    Code :
    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....
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  7. #7
    Expert Confirmé Avatar de jabbounet
    Homme Profil pro frederic frances
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 911
    Détails du profil
    Informations personnelles :
    Nom : Homme frederic frances
    Âge : 39

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 911
    Points : 2 968
    Points
    2 968

    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.

  8. #8
    Invité régulier
    Inscrit en
    décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 22
    Points : 7
    Points
    7

    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 Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 684
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 684
    Points : 10 618
    Points
    10 618

    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)
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  10. #10
    Invité régulier
    Inscrit en
    décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 22
    Points : 7
    Points
    7

    Par défaut

    ok, merci Sve@r pour tes conseils

  11. #11
    Expert Confirmé Avatar de jabbounet
    Homme Profil pro frederic frances
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 911
    Détails du profil
    Informations personnelles :
    Nom : Homme frederic frances
    Âge : 39

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 911
    Points : 2 968
    Points
    2 968

    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.

  12. #12
    Expert Confirmé Sénior

    Inscrit en
    janvier 2007
    Messages
    10 190
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 190
    Points : 14 375
    Points
    14 375

    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 Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 684
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 684
    Points : 10 618
    Points
    10 618

    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
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  14. #14
    Expert Confirmé Avatar de jabbounet
    Homme Profil pro frederic frances
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 911
    Détails du profil
    Informations personnelles :
    Nom : Homme frederic frances
    Âge : 39

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 911
    Points : 2 968
    Points
    2 968

    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.

  15. #15
    Invité régulier
    Inscrit en
    décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 22
    Points : 7
    Points
    7

    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
    Expert Confirmé Avatar de jabbounet
    Homme Profil pro frederic frances
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 911
    Détails du profil
    Informations personnelles :
    Nom : Homme frederic frances
    Âge : 39

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 911
    Points : 2 968
    Points
    2 968

    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

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •