Holen Sie sich alle Erweiterungen und deren jeweilige Dateianzahl in ein Verzeichnis

14

Alle Erweiterungen für ein Verzeichnis erhalten: einfach. Abrufen der Anzahl der Dateien für eine bestimmte Erweiterung: einfach.

Aber es spielt auf mich an, alle Dateierweiterungen und ihre jeweiligen Dateizahlen zu bekommen.

z.B.

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

sollte etwas zurückgeben wie:

.txt 2
.pdf 1
.pov 1

Das Ziel dieser Übung ist es, herauszufinden, welche Dateierweiterung in einem bestimmten Verzeichnis beliebt ist.

Danke im Voraus

Denormalisierer
quelle

Antworten:

47
/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

Hier ist die Erklärung:

find ./ -type f

finde nur Datei, nicht Verzeichnis

grep -E ".*\.[a-zA-Z0-9]*$"

Filterdatei mit Endung

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

Pfad und Dateinamen löschen, nur Erweiterung speichern

sort | uniq -c | sort -n

sort, uniq und sort

bindbn
quelle
Sie könnten dafür sorgen, dass Ihre Regex mehr Zeichen in der Erweiterung zulässt und auf diese Weise eliminiert grep:sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
Bis auf weiteres angehalten.
Dennis, der grep und sed durch sed ersetzt, gibt den folgenden Fehler zurück: sed: -e expression # 1, char 30: ungültige Referenz \ 1 auf `s 'Befehl RHS
denormalizer
1

Da Sie Linux (gnu grep) verwenden, ist dies ein guter Zeitpunkt, um Perl REs (PCRE) -Pund die -oOption von grep zu verwenden . Die Antwort von @ bindbn als großartigen Kandidaten ansehen:

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
Jim
quelle