Duplication possible:
Comment compter le nombre de dossiers dans un lecteur sous Linux?
J'ai une arborescence de répertoires très profonde sur ma machine Linux. Je voudrais compter tous les fichiers dans ce chemin, y compris tous les sous-répertoires.
Par exemple, étant donné cette arborescence de répertoires:
/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/
Si je passe /home
, je voudrais qu'il renvoie quatre fichiers. Ou bien, des points bonus si elle renvoie quatre fichiers et deux répertoires. En gros, je veux l’équivalent de cliquer avec le bouton droit de la souris sur un dossier sous Windows et de sélectionner les propriétés et de voir le nombre de fichiers / dossiers contenus dans ce dossier.
Comment puis-je le faire plus facilement? J'ai une solution impliquant un script Python que j'ai écrit, mais pourquoi n'est-ce pas aussi simple que d'exécuter ls | wc
ou similaire?
la source
locate
base de données est à jour:locate /some/path | wc -l
(ou sur mon Mac:)locate -c /some/path
. Mais: cela comptera également les fichiers/this/other/path/with/some/path
et comptera les dossiers eux-mêmes.Réponses:
find . -type f | wc -l
Explication:
find . -type f
recherche tous les fichiers ( -type f ) dans ce répertoire ( . ) Et dans tous les sous-répertoires. Les noms de fichiers sont ensuite imprimés au format standard par ligne.Ceci est ensuite canalisé | into
wc
(nombre de mots) l'-l
option indique à wc de ne compter que les lignes de son entrée.Ensemble, ils comptent tous vos fichiers.
la source
find
sortie1
Les réponses ci-dessus répondent déjà à la question, mais j'ajouterai que si vous utilisez find sans arguments (à l'exception du dossier dans lequel vous souhaitez que la recherche ait lieu), procédez comme suit:
la recherche va beaucoup plus vite, presque instantanément, ou du moins le fait pour moi. En effet, la clause type doit exécuter un appel système stat () sur chaque nom pour en vérifier le type - son omission évite de le faire.
Cela a la différence de renvoyer le nombre de fichiers et de dossiers au lieu de fichiers uniquement, mais au moins pour moi, cela me suffit car je l'utilise principalement pour rechercher les dossiers qui contiennent d'énormes quantités de fichiers qui prennent un temps fou à les copier et les compresser. Compter les dossiers me permet toujours de trouver les dossiers avec la plupart des fichiers, il me faut plus de rapidité que de précision.
la source
1
Pour les fichiers:
Pour les annuaires:
Ils travaillent tous les deux dans le répertoire de travail actuel.
la source
1
Avec bash 4+
Pas besoin d'appeler trouver deux fois si vous voulez rechercher des fichiers et des répertoires
la source
Légère mise à jour de la réponse acceptée, si vous voulez un nombre de répertoires et autres
la source
find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn
(Ici, le type%T
est vide pour un fichier normal, un astérisque pour un fichier exécutable ou une barre oblique pour un dossier; il%HT
est donc nécessaire, ou du texte supplémentaire pour éviter que l'espace ne soit compté, comme> %T
. )