Je voudrais qu'une commande BASH liste juste le nombre de fichiers dans chaque sous-répertoire d'un répertoire.
Par exemple , dans le répertoire /tmp
il y a dir1
, dir2
... Je voudrais voir:
`dir1` : x files
`dir2` : x files ...
En supposant que vous souhaitiez uniquement un nombre récursif de fichiers, pas de répertoires et d'autres types, quelque chose comme ceci devrait fonctionner:
find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
printf "%-25.25s : " "$dir"
find "$dir" -type f | wc -l
done
find
...-print0 | xargs -0
....bash
alias
!!sort -rn -k 2,2 -t$':'
vous obtenez la liste DESCCette tâche m'a tellement fasciné que j'ai voulu trouver moi-même une solution. Cela ne prend même pas une boucle de temps et PEUT être plus rapide en vitesse d'exécution. Inutile de dire que les efforts de Thor m'ont beaucoup aidé à comprendre les choses en détail.
Alors, voici le mien:
Il semble modeste pour une raison, car il est beaucoup plus puissant qu'il n'y paraît. :-)
Cependant, si vous avez l'intention de l'inclure dans votre
.bash_aliases
fichier, il doit ressembler à ceci:Notez la gestion très délicate des guillemets simples imbriqués . Et non, il n'est pas possible d'utiliser des guillemets doubles pour l'
sh -c
argument.la source
strace -fc script
. Votre version effectue environ 70% d'appels système supplémentaires. +1 pour le code plus court :-)find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "$(find "{}" -type f | wc -l)" {}' \; | sort -nr
Répertorie les dossiers et les fichiers du dossier actuel avec un nombre de fichiers trouvés en dessous. IMO rapide et utile. (les fichiers montrent avec le compte 1).
la source
| sort -rn
pour trier les sous-répertoires par nombre de fichiers.L'utilisation de find est certainement la voie à suivre si vous voulez compter de manière récursive, mais si vous voulez juste un décompte des fichiers directement sous un certain répertoire:
ls dir1 | wc -l
la source
ls -d */ | xargs -n1 ls | wc -l
(Utilisez la réponse que vous avez acceptée si cela fonctionne déjà! C'est juste et maintenant vous savez.)find
c'est si important. (encore moins-print0
etxargs -0
, déjà souligné par Scott dans l'autre réponse)J'ai souvent besoin de compter le nombre de fichiers dans mes sous-répertoires et d'utiliser cette commande. Je préfère que le décompte apparaisse en premier.
la source
Ce que j'utilise ... Cela fait un tableau de tous les sous-répertoires dans celui que vous donnez comme paramètre. Imprimez le sous-répertoire et le nombre de ce même sous-répertoire jusqu'à ce que tous les sous-répertoires soient traités.
la source
Vous pouvez utiliser ce code python. Démarrez l'interpréteur en exécutant
python3
et collez ceci:Ou une version récursive pour les nombres imbriqués:
Exemple de sortie:
la source