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. 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
  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. 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
  4. 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. 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