Ls -R aide

Mirah87 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonsoir a tous,
Je suis débutante et je viens de faire un script qui "nettoie" : si je mets log en parametre, il meffacera ts les fichiers ayant pr extensions .log ds le repertoire courant.
Seulement maintenant, je souhaite que cela s'exécute également dans les sous répertoires (récursivement). On ma dit d'appeler le script a linterieur de lui meme ou d'utiliser la commande ls -R, une boucle for ... in ... et 2 variables internes.

Je ne vois pas comment faire. Pouvez vous m'aider s'il vous plait.
Merci d'avance
A voir également:

7 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Peux-tu nous afficher ton script s'il te plaît, Merci.
À mon avis il ne doit pas y avoir grand chose à y changer...

;-))
0
Mirah87 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
I=' '
F=' '
SORTIE=' '
ERREUR=0

# I prend la valeur -i si l'utilisateur entre en premier argument -i sinon il garde sa valeur initiale (I=' ').
# F prend la valeur -f si l'utilisateur entre en premier argument -f sinon il garde sa valeur initiale (F=' ').
# Si l'utilisateur a entré l'option -f, alors tous les messages d'erreurs seront dirigés vers /dev/null.


case $1 in
'-i')
I="-i";;
'-f')
F="-f"
SORTIE="2>/dev/null";; # Si l'option est -f, on dirige les erreurs vers /dev/null

*)
ERREUR=1
echo $1 ": option invalide."
echo "Veuillez utiliser -i (mode interactif) oui -f (mode silencieux)";;
esac

# Si l'utilisateur a entré une option valide (ERREUR != 1), alors le programme effacera les fichiers correspondants au 2e argument.
# Selon l'option entrée en premier argument, on aura rm -i ou rm -f.
# Si l'option est -f, les erreurs n'apparaitront pas à l'écran.

if [ $ERREUR -ne 1 ]
then
case $2 in
'emacs')
rm $I $F *~ \#*\# $SORTIE;;
'log')
rm $I $F *.log $SORTIE;;
'latex')
rm $I $F *.log *.aux *.bbl $SORTIE;;
'tout')
rm $I $F *{~,#,.log,.aux,.bbl} $SORTIE;;
*)
echo $2 ": Type de fichier non effaçable.";;
esac
fi
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
De la façon dont est construit ton script, je ne vois pas comment tu pourrais parcourrir et effacer les fichiers correspondants à ton paramètre "$2" récursivements, du moins en employant "ls -R", dans la mesure où cette commande se contente d'afficher les répertoires (et sous-répertoires) et leur contenu sans leur chemin absolu !

Par contre en employant "find" combiné à "-exec", c'est envisageable...
Voilà à titre d'exemple ce que pourrait donner la ligne pour "log" :
find /répertoire -name "*.log" -exec  rm $I $F {} $SORTIE \;
A adapter selon tes besoins...

;-))
0
Mirah87
 
Javais penser a faire

d=liste des dossiers (je peux les avoir avec ls -R ????)

ensuite
for $d in "liste des dossiers"
t=$d/*.log



et joré just a rajouté $t :
rm $I $F $t log
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Re-

Non, ce n'est pas la bonne solution.
Comme expliqué dans mon post précédent, "ls -R" ne te renverra qu'une liste de dossiers (et fichiers, il faudrait un truc du genre "ls -R | grep "/$"" pour n'avoir que les répertoires...) sans leur chemin absolu et de ce fait dès que tu auras quitté le répertoire racine, tu auras droits à un message d'erreur pour tous les autres dossiers.

A la limite il vaut mieux un truc du genre :
for rep in $(find -type d); do rm $I $F ${rep}/*.log  ; done
0
Mirah87 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai un autre probleme (plus simple je pense)

Je dois afficher
"Le parametre $i est $k" ou "L'option $j est $k" selon si le parametre commence par un tiret ou pas.

J'ai fait une boucle if [ $k = "-*" ] then echo Loption etc
else echo Le parametre est ...

Mais il m'affiche toujours "Le parametre..." meme si il s'agit d'une option.
Savez vous pourquoi ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Re-
[jp@MDK tmpfs]$ set d
[jp@MDK tmpfs]$ echo $1
d
[jp@MDK tmpfs]$ if [ "x$1" = "x-o" ];then echo "option"; else echo "paramètre";fi
paramètre
[jp@MDK tmpfs]$ set -- "-o"
[jp@MDK tmpfs]$ echo $1
-o
[jp@MDK tmpfs]$ if [ "x$1" = "x-o" ];then echo "option"; else echo "paramètre";fi
option
[jp@MDK tmpfs]$
;-))
0