J'essaie de nettoyer un disque dur qui contient toutes sortes de conneries accumulées au fil des ans. du
a aidé à réduire l'utilisation du disque, mais le tout n'est toujours pas difficile à cause de la taille totale, mais du nombre total de fichiers et de répertoires.
Existe-t-il un moyen de faire quelque chose comme, du
mais sans compter la taille des fichiers, mais plutôt le nombre de fichiers et de répertoires? Par exemple: un fichier est 1 et un répertoire est le nombre récursif de fichiers / répertoires qu'il contient + 1.
Edit: j'aurais dû être plus clair. Je voudrais non seulement connaître le nombre total de fichiers / répertoires dans /
, mais aussi dans /home
, /usr
etc., et dans leurs sous-répertoires, de manière récursive, comme du
pour la taille.
Réponses:
J'ai trouvé
du --inodes
utile, mais je ne sais pas quelle version dedu
celui - ci nécessite. Sur Ubuntu 17.10, les travaux suivants:Combinez avec
| sort -nr
pour trier par ordre décroissant du nombre d'inodes contenus.la source
La façon la plus simple semble être
find /path/to/search -ls | wc -l
La recherche est utilisée pour parcourir tous les fichiers et dossiers.
-ls
pour lister (imprimer) tous les noms. Il s'agit d'une valeur par défaut et si vous la laissez de côté, elle fonctionnera toujours de la même manière sur presque tous les systèmes. (Presque, car certains peuvent avoir des valeurs par défaut différentes). C'est une bonne habitude de l'utiliser explicitement cependant.Si vous utilisez simplement la
find /path/to/search -ls
partie, tous les fichiers et répertoires seront imprimés sur votre écran.wc
est le nombre de mots. l'-l
option lui dit de compter le nombre de lignes.Vous pouvez l'utiliser de plusieurs manières, par exemple
La première option permet à wc d'ouvrir un fichier et de compter le nombre de lignes, de mots et de caractères dans ce fichier. La deuxième option fait de même mais sans nom de fichier, elle lit depuis stdin.
Vous pouvez combiner des commandes avec un tuyau
|
. La sortie de la première commande sera dirigée vers l'entrée de la deuxième commande. Ainsifind /path/to/search -ls | wc -l
utilise find pour lister tous les fichiers et répertoires et alimente la sortie vers wc. Wc compte alors le nombre de lignes.(Une autre alternative aurait été «ls | wc», mais find est beaucoup plus flexible et un bon outil pour apprendre.)
[Modifier après commentaire]
Il pourrait être utile de combiner la recherche et l'exec.
Par exemple
find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
, listera tous les répertoires dans /, sauf certains que vous ne souhaitez pas rechercher. Nous pouvons déclencher la commande précédente sur chacun d'eux, produisant une somme de fichiers par dossier dans /.Toutefois:
Cela fonctionnera sur Linux, mais pas sur n'importe quel Unix-a-alike.
la source
Le script PHP suivant fait l'affaire.
Mettez-le dans un fichier (par exemple, "
treesize
"),chmod +x
et exécutez-le avec./treesize . | sort -rn | less
.la source
du
cela compte simplement au lieu de sommer la taille, ce qui est exactement ce que la question d'origine a demandé.ncdu est idéal pour cela!
À partir de la page de manuel, vous pouvez également afficher les nombres par répertoire et les classer par nombre:
Par exemple:
la source
Exploitez le fait que les répertoires et les fichiers sont séparés par
/
. Ce script répond à vos critères, mais sert à inspirer une solution complète. Vous devriez également envisager d'indexer vos fichiers avec Locate.>
>
la source
Voici une solution qui utilise bash, inspirée d'un article d'Unix et Linux .
S'il y a des dossiers dont vous ne voulez pas voir les détails, comme
.git
, vous pouvez les exclure de la liste avecgrep
.la source