Précédent   Forum du club des développeurs et IT Pro > Général Développement > Programmation système > Linux
Linux Forum d'entraide sur la programmation Linux : shell, système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/10/2009, 20h03   #1
JoneZy
Invité régulier
 
Inscription : 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
JoneZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2009, 21h15   #2
N_BaH
Modérateur
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 756
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 756
Points : 6 629
Points : 6 629
pourquoi utilises-tu des backquotes autour de ta commande rm ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2009, 22h25   #3
JoneZy
Invité régulier
 
Inscription : décembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 22
Points : 7
Points : 7
Meme si je retire les backquotes, ca ne marche pas.
JoneZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2009, 22h41   #4
N_BaH
Modérateur
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 756
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 756
Points : 6 629
Points : 6 629
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
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2009, 23h31   #5
jabbounet
Expert Confirmé
 
Avatar de jabbounet
 
Homme frederic frances
Consultant informatique
Inscription : juin 2009
Messages : 1 848
Détails du profil
Informations personnelles :
Nom : Homme frederic frances
Âge : 37

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2009
Messages : 1 848
Points : 2 675
Points : 2 675
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
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 18h57   #6
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 496
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 45
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 : 3 496
Points : 6 610
Points : 6 610
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 19h52   #7
jabbounet
Expert Confirmé
 
Avatar de jabbounet
 
Homme frederic frances
Consultant informatique
Inscription : juin 2009
Messages : 1 848
Détails du profil
Informations personnelles :
Nom : Homme frederic frances
Âge : 37

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2009
Messages : 1 848
Points : 2 675
Points : 2 675
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.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 19h54   #8
JoneZy
Invité régulier
 
Inscription : décembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 22
Points : 7
Points : 7
Merci a tous
En effet c' est un exo de TP et j'apprecie l'aide que vous m'avez apporter.

Encore merci
JoneZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 20h54   #9
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 496
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 45
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 : 3 496
Points : 6 610
Points : 6 610
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 21h38   #10
JoneZy
Invité régulier
 
Inscription : décembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 22
Points : 7
Points : 7
ok, merci Sve@r pour tes conseils
JoneZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 23h30   #11
jabbounet
Expert Confirmé
 
Avatar de jabbounet
 
Homme frederic frances
Consultant informatique
Inscription : juin 2009
Messages : 1 848
Détails du profil
Informations personnelles :
Nom : Homme frederic frances
Âge : 37

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2009
Messages : 1 848
Points : 2 675
Points : 2 675
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....

Citation:
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.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2009, 12h40   #12
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 590
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 590
Points : 11 927
Points : 11 927
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
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2009, 18h55   #13
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 496
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 45
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 : 3 496
Points : 6 610
Points : 6 610
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2009, 19h43   #14
jabbounet
Expert Confirmé
 
Avatar de jabbounet
 
Homme frederic frances
Consultant informatique
Inscription : juin 2009
Messages : 1 848
Détails du profil
Informations personnelles :
Nom : Homme frederic frances
Âge : 37

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2009
Messages : 1 848
Points : 2 675
Points : 2 675
c'est clair que de faire un suppression de fichier un peu plus destructrice que prévu à du arriver à beaucoup de personnes.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2009, 12h48   #15
JoneZy
Invité régulier
 
Inscription : décembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 22
Points : 7
Points : 7
Citation:
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é.
JoneZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2009, 12h59   #16
jabbounet
Expert Confirmé
 
Avatar de jabbounet
 
Homme frederic frances
Consultant informatique
Inscription : juin 2009
Messages : 1 848
Détails du profil
Informations personnelles :
Nom : Homme frederic frances
Âge : 37

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2009
Messages : 1 848
Points : 2 675
Points : 2 675
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
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h07.


 
 
 
 
Partenaires

Hébergement Web