Retourner aux forums || Retourner au forum Astuces.divers

Astuces.divers : [Terminal] Compter le nombre de fichiers par extension dans un répertoire

Posté par Gentoo][Gravis (page perso, ) le 21 décembre 2005
0
find -name "*.*" |sed 's/.*\.//g' | sort | uniq -c |sort -n > result.txt && sed 's/^[[:blank:]]*//g' result.txt > /tmp/temp.txt && mv -f /tmp/temp.txt result.txt && sed 's/ /,/g' result.txt > /tmp/temp.txt && mv -f /tmp/temp.txt result.txt

Le premier sed doit pouvoir être amélioré.

> Lire le message (2 commentaires, moyenne: 2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Plus simple:

Posté par Jérôme Pinot (page perso, ) le 02/10/2005 à 01:09. (lien). Évalué à 2.

Le premier sed doit pouvoir être amélioré.

Moi c'est surtout les commandes qui suivent que je trouve un peu lourdes. Voila plus simple et un peu plus elegant:


find . -name "*.*"|sed 's/.*\.//g'|sort|uniq -c|sort -nr|gawk 'OFS="\t" {print $1,$2}' > result.txt



NB: l'option -i de sed t'eviterait de travailler sur 2 fichiers...

Une version avec Perl...

Posté par Arthur Accroc () le 29/11/2005 à 19:08. (lien). Évalué à 2.

avec un résultat similaire à la tienne :

find . -name '*.*' | perl -nle 's/^.*\.//; ++$n{$_}; END { foreach (sort { $n{$a} <=> $n{$b} || $a cmp $b } keys(%n)) { print "$n{$_},$_" } }' > result.txt

ou à celle de Jérôme (c'est-à-dire en affichant dans l'ordre décroissant des fréquences et avec une tabulation comme séparateur), mais en gardant l'ordre alphabétique pour les extensions ayant une même fréquence :

find . -name '*.*' | perl -nle 's/^.*\.//; ++$n{$_}; END { foreach (sort { $n{$b} <=> $n{$a} || $a cmp $b } keys(%n)) { print "$n{$_}\t$_" } }' > result.txt

ou encore une variante transformant en minuscules les extensions qui n'y sont pas :

find . -name '*.*' | perl -nle 's/^.*\.//; ++$n{lc($_)}; END { foreach (sort { $n{$b} <=> $n{$a} || $a cmp $b } keys(%n)) { print "$n{$_}\t$_" } }' > result.txt

--
Berlin 1936, Moscou 1980, Pékin 2008.
Jeux Olympiques, sponsor officiel de la dictature.
Mexico 1968, Pékin 2008.
Jeux Olympiques, sponsor officiel de la répression.

Revenir en haut de page || Retourner aux forums || Retourner au forum Astuces.divers