Je veux voir combien de fichiers sont dans les sous-répertoires pour savoir où tout l'utilisation d'inode est sur le système. Un peu comme je le ferais pour l'utilisation de l'espace
du -sh /*
ce qui me donnera l'espace utilisé dans les répertoires en dehors de root, mais dans ce cas, je veux le nombre de fichiers, pas la taille.
disk-usage
recursive
inode
xénoterracide
la source
la source
du -sh /*
clairement comment je voulais que le décompte fonctionne. Même chose, il suffit de compter les fichiers et non les octets.Réponses:
Merci à Gilles et xenoterracide pour les correctifs de sécurité / compatibilité.
La première partie:
find -maxdepth 1 -type d
retournera une liste de tous les répertoires du répertoire de travail actuel. Ceci est canalisé à ...La deuxième partie:
while read -r dir; do
commence une boucle while - tant que le tube entrant est ouvert (c'est-à-dire jusqu'à ce que la liste complète des répertoires soit envoyée), la commande read placera la ligne suivante dans la variable "dir". Puis ça continue ...La troisième partie:
printf "%s:\t" "$dir";
affichera la chaîne dans "$ dir" (qui contient l'un des noms de répertoires) suivie d'un onglet.La quatrième partie:
find "$dir -f file"
dresse la liste de tous les fichiers du nom du répertoire dans "$ dir". Cette liste est envoyée à ..La cinquième partie:
wc -l;
compte le nombre de lignes envoyées dans son entrée standard.La dernière partie:
done
termine simplement la boucle while.Nous obtenons donc une liste de tous les répertoires du répertoire en cours. Pour chacun de ces répertoires, nous générons une liste de tous les fichiers qu'il contient afin de pouvoir les compter tous avec
wc -l
. Le résultat ressemblera à:la source
read -r
commeread
traitement ordinaire les antislashs. Ensuiteecho -en "$dir:\t"
, supprimez de nouveau les barres obliques inverses; une solution simple consiste à utiliser à laprintf '%s:\t' "$dir"
place. Ensuite,$dir
devrait être"$dir"
( utilisez toujours des guillemets doubles autour des substitutions de variables ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
à la fin de ceci, pour beaucoup de répertoires, pour que je sache où est la plus grande utilisation-type f
à faire la liste des fichiers:find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
illegal option -- m
dans lafind
commande. Je l'ai changéfind . -maxdepth ...
et je l'ai fait fonctionner.Essayez
find . -type f | wc -l
, il comptera tous les fichiers du répertoire actuel ainsi que tous les fichiers des sous-répertoires. Notez que tous les répertoires ne seront pas comptés comme des fichiers, seuls les fichiers ordinaires le seront.la source
Voici une compilation de commandes de listage utiles (recalées en fonction du code des utilisateurs précédents):
Liste des dossiers avec nombre de fichiers:
Liste des dossiers avec un nombre de fichiers non nul:
Liste des dossiers avec nombre de sous-dossiers:
Liste des dossiers avec un nombre de sous-dossiers non nul:
Liste des dossiers vides:
Répertoriez les dossiers non vides avec le contenu:
la source
Essayer:
comme point de départ, ou si vous ne voulez vraiment que lire à travers les sous-répertoires d'un répertoire (et ignorer les fichiers de ce répertoire de niveau supérieur)
la source
find
fonctionne de manière récursive à travers tous les sous-répertoires par défaut. Si vous souhaitez qu'il fonctionne dans plusieurs emplacements, vous pouvez tous les spécifier entrefind
et-type
.698035
. Je devrais voir environ 6 chiffres./home
? Je serais à 100% certain que non.La solution suivante compte le nombre réel d'inodes utilisés à partir du répertoire actuel:
Pour obtenir le nombre de fichiers du même sous-ensemble, utilisez:
Pour les solutions explorant uniquement les sous-répertoires, sans prendre en compte les fichiers du répertoire en cours, vous pouvez vous référer à d'autres réponses.
la source
find -printf '%i\n' | sort -u | wc -l
. Si vous vouliez être portable, vous auriezfind . -exec ls -id {} + | cut …
plutôt besoin .OS X 10.6 étouffe la commande dans la réponse acceptée, car elle ne spécifie pas de chemin pour
find
. Utilisez plutôt:la source
Je sais que je suis en retard pour la fête, mais je crois que cette
bash
solution pure (ou autre shell qui accepte les doubles étoiles globales) pourrait être beaucoup plus rapide dans certaines situations:sortie:
la source
Essayez ceci:
Cela devrait fonctionner correctement à moins que les noms de fichiers incluent des nouvelles lignes.
la source
-maxdepth 1
immédiatement après le premierfind
. Si vous souhaitez inclure le nombre de sous-répertoires dans votre compte, supprimez-le-type f
à la fin (cela aurait dû être le! -type d
cas de toute façon, de sorte que tous les fichiers autres que des répertoires auraient été inclus).Si vous en avez déjà
ncdu
installé un (indispensable lorsque vous souhaitez effectuer un nettoyage), tapez simplementc
"Activer / désactiver l'affichage du nombre d'éléments enfants". EtC
pour "Trier par articles".la source
du --inodes
Je ne sais pas pourquoi personne (moi compris) n'était au courant:
Je suis sûr que cela résoudra le problème du PO. J'ai commencé à l'utiliser souvent pour savoir où se trouvent tous les fichiers indésirables de mes énormes disques (et les décharger sur un disque plus ancien).
Plus d'infos
Si vous ne voulez pas recurse (ce qui peut être utile dans d'autres situations), ajoutez
la source