[Résolu] [Script Bash] Lister et compter

Résolu
madmax61 Messages postés 5 Statut Membre -  
madmax61 Messages postés 5 Statut Membre -
Bonjour,
je souhaite faire un script bash qui à l'air tout simple mais je n'y arrive pas !

J'ai un répertoire qui contient divers dossiers et sous dossiers, je veux faire un script qui puisse parcourir l'ensemble des dossiers et sous dossiers pour compter le nombre de fichier que contient chaque dossier.

Ensuite si un dossier contient plus de 2 fichiers il faudrait que le script me note son chemin dans un fichier txt.

D'avance merci de vos idée et de votre aide.

5 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Ça devrait faire l'affaire :

    find /chemin/repertoire -type d -exec sh -c '
    if [ "$(ls "$1" | grep -Ev '/$' | wc -l)" -gt "2" ]
    then echo "$1" >> fich.txt 
    fi' _ {} \;
    3
    1. Pimp92a Messages postés 442 Statut Membre 44
       
      On va t'appeler Mr Cli si tu continues à sortir des lignes comme celle là ;)
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Tu as déjà commencé à faire quelque chose ou pas ?
    0
  3. madmax61 Messages postés 5 Statut Membre
     
    Oui mais rien qui ne fonctionne vraiment !

    Mon idée de départ était à base de ls -R mais ca fonctionnait pas, ensuite j'ai testé avec (ls -A | wc -l) -ge 2 mais ca ne fonctionne pas plus !

    En gros je suis pas doué en script donc je part dans tous les sens ! :(
    0
  4. madmax61 Messages postés 5 Statut Membre
     
    Ca me rassure... je n'aurais jamais trouvé tout seul !!!

    MERCI BEAUCOUP !!!

    Par contre pour ma culture personnelle peux tu me dire comment fonctionne le -gt et pourquoi sur la première ligne tu ajoutes le -exec sh -c '
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      find /chemin/repertoire
      On recherche récursivement dans le répertoire spécifié


      -type d
      Uniquement les répertoires


      -exec sh -c '
      On interprète le résultat dans un shell (remplacer sh par son shell, chez moi sh est un lien vers bash), dont les commandes seront lues depuis la chaine qui suit le paramètre "-c".



      if [ "$(ls "$1" | grep -Ev '/$' | wc -l)" -gt "2" ]
      On évalue le résultat de chaque répertoire.
      Il faut savoir que comme dans un script shell normal, "sh -c" exécute la ou les commande(s) contenue(s) entre les quotes simples, et que le prochain/premier argument fourni est considéré comme $0 (nom du script) et les suivants comme des paramètres positionnels ($1, $2, etc.).
      Donc ici $1 correspond à chaque répertoire (avec son chemin complet) trouvé, qui est envoyé à la commande "ls" pour en lister le contenu, de ce contenu on supprime les éventuels répertoires (grep -Ev '/$') pour ne garder que la liste des fichiers, qu'on passe ensuite à la commande "wc -l" pour les compter.



      then echo "$1" >> fich.txt
      Si le résultat est supérieur à 2 (-gt = greater than = plus grand que), on écrit le tout ($1) dans le fichier


      fi'
      Fin du if


      _ {} \;
      Donc,
      "_" correspond à "$0"
      "{}" à $1
      et "\;" termine la commande "find" et est protégé pour ne pas être interprété par le shell en cours.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. madmax61 Messages postés 5 Statut Membre
     
    MERCI !!!
    Je ne pouvais espérer meilleur commentaire ! :)
    0