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 -
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
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:
- Ls -R aide
- Sfc /scannow /f /r - Guide
- R-linux - Télécharger - Sauvegarde
- Toolshub.xyz r - Télécharger - Divers Jeux
- L et r signification ✓ - Forum Audio
- R à l'envers - Forum Réseaux sociaux
7 réponses
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...
;-))
Peux-tu nous afficher ton script s'il te plaît, Merci.
À mon avis il ne doit pas y avoir grand chose à y changer...
;-))
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
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
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" :
;-))
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...
;-))
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
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
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 ?
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 ?
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]$;-))