Compter le nombre de fichiers d'un dossier (no wc) [Fermé]

Signaler
-
 gnu7 -
Bonjour,

Je cherche un moyen de compter le nombre de fichier d'un dossier (sous-dossiers inclus), si possible avec un utilitaire existant.
Il y a bien la commande find, mais je ne trouve pas d'option permettant de simplement compter le nombre de fichiers.
Quant à faire quelque chose du style find $dossier -print0 | quelquechose_pour_compter, c'est bien pour du dépannage rapide, mais je ne vois pas l’intérêt d'afficher tous les noms de fichiers pour les passer à un autre programme qui va lui faire un comptage sur ces chaines de caractères... c'est bien compliqué juste pour compter le nombre de fichiers d'un dossier.
J'aimerais utiliser une façon de faire la plus performante possible.

Sinon j'ai vu une solution du type du -s --inodes $dossier, mais serait-ce fiable ? Je trouve peu d'exemples sur le sujet, j'ai peur de cas particuliers auxquels je n'aurais pas pensé, montage particulier ou système de fichiers windows

4 réponses

Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
141
Salut,

Si la commande tree est installée :
tree /chemin/ | tail -1


Exemple :
$ tree dok/| tail -1
15 directories, 31 files

Merci, le programme fait le compte lui-même effectivement.
Mais, désolé de titiller :-), cet utilitaire envoie inutilement les noms des fichiers sur la sortie standard, en plus du traitement qu'il doit faire dessus pour les afficher sous forme d'arbre. Je souhaiterais juste compter le nombre de fichiers, pas besoin de faire tout ça en même temps.
Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
141
Je souhaiterais juste compter le nombre de fichiers, pas besoin de faire tout ça en même temps.
Ben il ne te reste plus qu'à coder ton propre programme qui fasse exactement ce que tu veux qu'il fasse ;-\
On dirait bien ! J'en étais arrivé à la même conclusion, puis je me suis dit si je ne trouve pas de discussion là-dessus alors à moi d'en ouvrir une.
Finalement c'est assez limité le shell. Je te remercie d'avoir cherché également.

Le sujet reste ouvert au cas où quelqu'un aurait une idée, peut-être avec une commande très proche du système à laquelle on n'aurait pas pensé.
Je vais aller tester du sur du fat32 ou ntfs pour voir
Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
141 > gnu7
Finalement c'est assez limité le shell.
Que tu dis ;-(
De n'importe quelle façon que tu fasses, il faudra bien à un moment ou un autre, lister le contenu pour comptabiliser le tout, et que ce soit sur la sortie standard, dans la mémoire ou où bon te semble.
Donc je ne vois pas ce qui te gène là-dedans ? ;-\
Bah ce que je veux que la machine fasse c'est
- Accéder à la "table des matières" du dossier
- Déterminer le nombre de fichiers qu'il contient, soit en parcourant la "table des fichiers", en mémoire cela se traduirait par l'incrémentation une seule variable entière, ou soit en le déterminant directement selon les informations disponibles dans cette "table des matières" s'il y a cette possibilité.
- L'afficher.

Afficher tous les noms de fichiers pour les passer à un second programme qui lui va faire un comptage, je trouve que cela fait beaucoup d'opérations inutiles, même si ça ne représente quasi rien sur les systèmes récents.
Ce n'est même plus du tout la même chose, on compte des lignes ou des caractères, là où on cherchait à compter un nombre de fichiers d'un dossier sur un système, c'est une méthode indirecte pour arriver au résultat.

un problème momentané avec l'interface du forum ?
je n'arrive pas à faire enregistrer/apparaître mon code.

bon. finalement, ça a été posté...

Finalement c'est assez limité le shell.
bah, oui, si tu te coupes un doigt de pieds tu vas courir moins vite/bien !
#!/bin/bash

listF=( ./* )
printf 'nb fichiers: %d\n' ${#listF[*]}
Salut, il faudrait l'adapter pour prendre en compte les fichiers qui commencent par un point, le test si fichier/dossier, mais sinon c'est le même problème, on parcours pour enregistrer des noms dans un tableau en gardant le tout en mémoire, pour finalement compter ces noms avec une deuxième commande.
Utilisateur anonyme
oui, c'est du shell, pas du C !
c'est plus simple, et moins puissant.

c'est un outil d'administration d'abord; il y a des niveaux systèmes auxquels il ne peut accéder tout seul.
Je vous remercie tous pour vos réponses.
Effectivement c'est du shell, mais je trouve que ça valait le coup de se poser la question :-)
Cherchant une solution que j'aurais pu utiliser de base sur la plupart des systèmes, je ne vais pas compiler de programme perso en C, et rester sur une solution avec un find -print0, même si la solution listF=( ./* ) a l'air de bien fonctionner aussi.

Je garde ça en tête au cas où je tomberais un jour sur une manière plus directe d'avoir ce résultat en shell