10
votes

Script pour compter le nombre de fichiers dans chaque répertoire

Je dois compter le nombre de fichiers sur un grand nombre de répertoires. Existe-t-il un moyen facile de le faire avec un script shell (en utilisant la recherche, wc, sed, awk ou similaire)? Juste pour éviter de devoir écrire un script approprié en python.

La sortie serait quelque chose comme ceci: xxx

Le nombre après le nom du DIR serait le nombre de fichiers . Un plus serait capable de transformer le comptage de fichiers dot / cachés sur et éteindre.

merci!


0 commentaires

11 Réponses :


3
votes

essayer ls | wc il répertorie le fichier dans votre répertoire et donne une liste de fichiers sortie sur WC en tant qu'entrée


0 commentaires

6
votes
find <dir> -type f | wc -l
find  -type f will list all files in the specified directory one at each line, wc -l count the amount of newlines seen from stdin.Also for future reference: answers like this are a google away.

1 commentaires

Je sais que cette réponse. La question était un peu différente. Y a-t-il un moyen simple de mettre cela dans une boucle pour tous les annuaires?



14
votes

Essayez le ci-dessous:

du -a | cut -d/ -f2 | sort | uniq -c | sort -nr


1 commentaires

Il a répertorié des fichiers pour moi, dommage!



3
votes

Une manière comme ceci:

$ for dir in $(find . -type d  )
> do
>  echo $dir $(ls -A $dir | wc -l )
> done


0 commentaires

4
votes

plus ou moins ce que je cherchais: xxx


0 commentaires

1
votes
> find . -type d
.
./SunWS_cache
./wicked
./wicked/segvhandler
./test
./test/test2
./test/tempdir.
./signal_handlers
./signal_handlers/part2
> find . -type d | xargs ls -1 | perl -lne 'if(/^\./ || eof){print $a." ".$count;$a=$_;$count=-1}else{$count++}'

.: 79
./SunWS_cache: 4
./signal_handlers: 6
./signal_handlers/part2: 5
./test: 6
./test/tempdir.: 0
./test/test2: 0
./wicked: 4
./wicked/segvhandler: 9

0 commentaires

0
votes

J'utilise ces fonctions: xxx pré>

Les deux supposent que les noms de fichiers ne contiennent pas de nouvelles lignes. P>

Voici les versions Bash-seulement: P>

nf()(shopt -s nullglob dotglob;for d;do a=("$d"/*);echo "${#a[@]} $d";done)
nfr()(shopt -s nullglob dotglob globstar;for d;do a=("$d"/**);echo "${#a[@]} $d";done)


0 commentaires

0
votes

J'ai aimé la sortie de la réponse basée sur la DU, mais lorsque je cherchais un grand système de fichiers, il prenait des siècles, donc je mets ensemble un petit script basé sur la LS qui donne la même sortie, mais beaucoup plus rapide:

for dir in `ls -1A ~/test/`;
do
  echo "$dir `ls -R1Ap ~/test/$dir | grep -Ev "[/:]|^\s*$" | wc -l`"
done


0 commentaires

1
votes

une version générique de la solution de Mehdi Karamosly pour répertorier les dossiers de n'importe quel répertoire sans modification du répertoire actuel xxx

Explication:

  1. extrayez le répertoire en variable
  2. Démarrer une nouvelle coquille
  3. Changer le répertoire dans cette coquille de sorte que le répertoire de Shell actuel reste le même
  4. processus

0 commentaires

-1
votes

trouver -type f -printf '% h \ n' | Trier | UNIQ -C | Trier -n


0 commentaires

0
votes

Vous pouvez essayer de copier la sortie de la commande LS dans un fichier texte, puis comptez le nombre de lignes dans ce fichier.

ls $ emplacement> outtext.txt; Num_files = $ (wc -w wasttext.txt); echo $ num_files


0 commentaires