script: nombre de répertoires,fichiers - Shell/Batch - Programmation
Marsh Posté le 19-08-2008 à 10:20:40
Tu as tout fait pourtant.
Pour les répertoires :
find /offres -type d | wc -l >> fichier_de_résultat
Pour les fichiers :
find /offres -type f | wc -l >> fichier_de_résultat
Plus d'information en tapant man find
Marsh Posté le 19-08-2008 à 10:29:33
Merci, c'est vrai que je ne suis pas loin.. mais je pense qu'il faut que je fasse une boucle for pour que, pour chaque répertoire contenus dans /offres, j'obtienne son nombre de répertoires et de fichiers ainsi que sa taille
Et qu'également mon fichier créé ressemble à ça:
Nom_daffaire Nbre_rép Nbre_fichiers taille
C'est là que ça se complique ^^
Marsh Posté le 19-08-2008 à 10:59:10
Ah. Il te faut savoir que find est récursif : si tu ne lui dis pas le contraire, il va parcourir tous les sous-répertoires jusqu'aux derniers présents dans /offres. Donc le nombre de répertoires/fichiers que tu obtiendras avec wc -l sera global, et concernera la totalité du contenu de /offres.
Si j'ai bien compris, tu as dans /offres un certains nombres de sous-dossiers qui contiennent x sous-sous-dossiers et y fichiers.
Tu devrais obtenir un truc du genre (en bash ou en ksh) :
|
Manque plus que la taille, mais je ne sais pas ce que tu veux dire par là : taille de l'ensemble du sous-dossier ?
Si oui, il suffit d'ajouter ceci au code ci-dessus :
taille=$(du -sk $affaire | cut -f1) |
Et d'afficher $taille ensuite dans ton fichier de résultats.
Marsh Posté le 19-08-2008 à 11:44:38
Oui c'est bien ça
La boucle for ne doit pas être très compliquée mais connaissant bien le langage C,C++ .. j'ai du mal à me faire à la syntaxe de cette boucle for
Je vais tester ton petit script, merci bcp pour l'aide
Marsh Posté le 22-08-2008 à 20:58:49
Neenou a écrit : La boucle for ne doit pas être très compliquée mais connaissant bien le langage C,C++ .. j'ai du mal à me faire à la syntaxe de cette boucle for |
Le principe de la boucle for est de pouvoir traiter un à un une liste d'élément
Code :
|
Va instancier une boucle de 3 itérations et à chaque itération, la variable "var" prendra la valeur "hello", "titi" et "toto".
S'il n'y avait que ça, la boucle for n'apporterait que très peu d'avantage. Mais le shell possède d'autres outils et l'un des plus fameux est la délégation => il délègue aux programmes annexes ce qu'il ne sait pas faire lui-même.
Le principe: il est nécessaire que le programme
- existe (mais on peut le créer s'il n'existe pas)
- affiche son résultat à l'écran
Exemple: expr 5 + 1 => affiche le résultat (6) à l'écran
A partir de là, le shell, s'il ne sait pas faire de calcul (comme le Bourne Shell) peut déléguer ce travail à expr. Il lui suffit de mettre l'appel de expr entre backquotes et tout ce que expr affiche sera récupéré ensuite.
Donc, si on veut faire un calcul et récupérer le résultat, on écrit
Code :
|
ou bien
Code :
|
Et ce mécanisme (qui n'existe nulle part ailleurs, même pas en C++) permet de tout faire. Si le shell ne sait pas faire une action, ben il délègue l'action à un outil externe et si l'outil n'existe pas ben on le crée (en C++ par exemple). Seule contrainte => l'outil doit afficher son résultat à l'écran
Les backquotes étant parfois désagréables, les shells évolués ont introduit une nouvelle notation: $(commande) et donc l'exemple précédent peut de réécrire
Code :
|
Et donc il est maintenant possible d'associer la boucle for avec ce mécanisme en écrivant
Code :
|
Le shell commencera par exécuter "commande quelconque" et replacera tout ce qu'elle affiche à la place. Cela donnera donc une boucle de ce style
Code :
|
Et donc chaque mot pourra être traité. C'est ce qui amène à la soluce d'Elmoricq
Code :
|
La commande "find /offres..." renvoie toute une liste de fichiers et cette liste est ensuite traitée fichier par fichier dans la boucle.
Comme quoi, d'une simple boucle for...
Marsh Posté le 19-08-2008 à 10:17:20
Salut à tous
J'aimerai faire un script qui me permettrai à son lancement de me donner le nombre de tout les répertoires et fichiers qui se trouvent dans mon répertoire courant.
Je m'explique: je suis dans le répertoire /offres où se trouvent plusieurs dossiers d'affaire. Lorsque je lancerai mon petit programme dans mon répertoire courant (ici /offres), je saurais, pour chaque affaires contenu dans ce répertoire, le nombre de fichiers et de répertoires qu'ils contiennent (et si possible même la taille de répertoire de chaque affaires.)
J'aimerai que le résultat soit envoyé dans un fichier qui contiendra pour chaque ligne le nom du répertoire d'affaire avec son nombre de répertoire et de fichier ainsi que sa taille.
Je pense qu'il faudrait une boucle for avec la commande find pour compter le nombre de fichiers et de répertoires.. (find . -type d | wc -l et find . -type f | wc -l) et la redirection >> pour écrire le résultat dans un fichier. Mais j'ai bien du mal à contruire tout ça !!
Je dois le faire assez rapidement
Si vous pouvez m'aider, me donner une trame ou autre, je suis partante
Merci