Script shell arborescence

Fermé
vin0 Messages postés 1 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 24 décembre 2009 - 24 déc. 2009 à 19:40
 Vin0 - 30 déc. 2009 à 16:10
Bonjour,

Je suis totalement débutant dans l'utilisation de shell et je cherche à réaliser un script en shell sh.

Sans utiliser la commande "find" ce script doit prendre en paramètre une commande et l’exécuter
dans toutes les parties de l’arborescence, quelle que soit leur profondeur.

Si quelqu'un a une idée.

Merci,

Vin0
A voir également:

5 réponses

Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
25 déc. 2009 à 13:08
Salut,
ça devrait pouvoir ressembler à ça :
#!/bin/bash
if -n "$1"; then
 echo "Usage : " $0 " command";
 echo "Exécute command dans tous les sous-répertoires du dossier courant.";
else
  for i in ./*
  do
    if [ -d "$i" ]
    then
      $1 $i;
    fi
  done
fi
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 déc. 2009 à 13:37
hello
on peut utiliser du pour obtenir l'arborescence
#!/bin/bash

test -z "$1" && { echo usage: $0 commande ; exit 1 ; }
HERE=$PWD
du | ( while read T D ; do
        cd "$D"
        $1
        cd $HERE
done) 
0
Merci beaucoup pour ces deux réponses!

Ces scripts sont en bash, seraient-ils différents en sh?
Pourriez vous également les commenter svp?

Merci,

Vin0
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
26 déc. 2009 à 08:46
les scripts proposés ici n'ont rien de spécifique bash et fonctionnent avec #!/bin/sh
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
25 déc. 2009 à 19:34
Ça ressemble fort à une question de cours, non ?
Je te laisse te documenter par toi même.... ;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 déc. 2009 à 20:52
Salut,

Sans utiliser la commande "find" ce script doit prendre en paramètre une commande et l’exécuter dans toutes les parties de l’arborescence, quelle que soit leur profondeur.

L'énoncé du 1er message aurait du te mettre la puce à l'oreille, non ? ;-))
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
26 déc. 2009 à 15:38
C'a été le cas, mais ça me semble normal de demander de l'aide tant qu'il fait un petit effort de compréhension.
0
Justement, toutes les documentations que je trouve concernent le bash et non le sh.
0

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

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 déc. 2009 à 09:28
autre méthode, on parcourt l'arborescence avec une fonction récursive
$ cat ~/f1
#!/bin/sh
test -z "$1" && { echo usage: $0 commande ; exit 1 ; }
CMD="$@"
fx()
{
	for F in $(ls -a|egrep -v '^\.$|^\.\.$')
	do test -d $F -a ! -h $F -a -r $F && { cd $F ; fx $F ; cd .. ; } ; done
	$CMD
}
fx $PWD

$ cd /tmp
$ mkdir -p a/b/c/d
$ cd a
$ ~/f1 pwd
/tmp/a/b/c/d
/tmp/a/b/c
/tmp/a/b
/tmp/a
$ 
0
Merci beaucoup pour votre aide!
0