Script shell arborescence

vin0 Messages postés 1 Statut Membre -  
 Vin0 -
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. Flachy Joe Messages postés 2303 Statut Membre 261
     
    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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  3. Vin0
     
    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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      les scripts proposés ici n'ont rien de spécifique bash et fonctionnent avec #!/bin/sh
      0
  4. Flachy Joe Messages postés 2303 Statut Membre 261
     
    Ça ressemble fort à une question de cours, non ?
    Je te laisse te documenter par toi même.... ;-)
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
      1. Flachy Joe Messages postés 2303 Statut Membre 261 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
    2. Vin0
       
      Justement, toutes les documentations que je trouve concernent le bash et non le sh.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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. Vin0
       
      Merci beaucoup pour votre aide!
      0