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

Signaler
Messages postés
4
Date d'inscription
jeudi 7 avril 2011
Statut
Membre
Dernière intervention
30 mai 2019
-
Messages postés
4
Date d'inscription
jeudi 7 avril 2011
Statut
Membre
Dernière intervention
30 mai 2019
-
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

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 172
Ç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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
416
Date d'inscription
vendredi 26 juin 2009
Statut
Membre
Dernière intervention
17 octobre 2011
44
On va t'appeler Mr Cli si tu continues à sortir des lignes comme celle là ;)
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 172
Salut,

Tu as déjà commencé à faire quelque chose ou pas ?
Messages postés
4
Date d'inscription
jeudi 7 avril 2011
Statut
Membre
Dernière intervention
30 mai 2019

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 ! :(
Messages postés
4
Date d'inscription
jeudi 7 avril 2011
Statut
Membre
Dernière intervention
30 mai 2019

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 '
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 172
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.
Messages postés
4
Date d'inscription
jeudi 7 avril 2011
Statut
Membre
Dernière intervention
30 mai 2019

MERCI !!!
Je ne pouvais espérer meilleur commentaire ! :)