Script shell arborescence

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
Configuration: Linux
Firefox 3.5.6

5 réponses

  1. 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
    1. Contributeur
      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
      1. 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
        1. Contributeur
          les scripts proposés ici n'ont rien de spécifique bash et fonctionnent avec #!/bin/sh
          0
      2. Ça ressemble fort à une question de cours, non ?
        Je te laisse te documenter par toi même.... ;-)
        0
        1. Modérateur
          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
        2. Justement, toutes les documentations que je trouve concernent le bash et non le sh.
          0
        3. @jipicyC'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
      3. Contributeur
        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
        1. Merci beaucoup pour votre aide!
          0