Ich möchte die Anzahl der Dateien für jede Erweiterung in einem Verzeichnis sowie die Dateien ohne Erweiterung zählen.
Ich habe einige Optionen ausprobiert, aber noch keine funktionierende Lösung gefunden:
find "$folder" -type f | sed 's/.*\.//' | sort | uniq -c
ist eine Option, funktioniert aber nicht, wenn keine Dateierweiterung vorhanden ist. Ich muss wissen, wie viele Dateien keine Erweiterung haben.Ich habe auch versucht, eine Suchschleife in ein Array zu integrieren und dann die Ergebnisse zu summieren, aber zu diesem Zeitpunkt löst dieser Code einen nicht deklarierten Variablenfehler aus, jedoch nur außerhalb der Schleife:
declare -a arr arr=() echo ${arr[@]}
Dies löst eine nicht deklarierte Variable aus sowie sobald die Suchschleife abgeschlossen ist.
quelle
ext = [ f.split('.')[-1] for f in os.listdir('./') ]
davonkommen , wie Thatll es paar Zeilen kürzer und vielleicht mehr Pythonic machenWenn Sie GNU awk haben, könnten Sie so etwas tun
dh Konstruieren / Inkrementieren eines assoziativen Arrays, das im letzten
.
getrennten Feld eingegeben wurde , oder einer beliebigen festen Zeichenfolge, z. B.(none)
wenn keine Erweiterung vorhanden ist.mawk
scheint kein Null-Byte-Datensatztrennzeichen zuzulassen - Sie können esmawk
mit dem Standard-Zeilenumbruchtrennzeichen verwenden, wenn Sie sicher sind, dass Sie keine Zeilenumbrüche in Ihren Dateinamen behandeln müssen:quelle
Mit Basic
/bin/sh
oder sogarbash
der Aufgabe kann es etwas schwierig sein, aber wie Sie in anderen Antworten sehen können, können die Tools, die mit aggregierten Daten arbeiten können, diese Aufgabe besonders einfach bewältigen. Ein solches Tool wäre diesqlite
Datenbank.Der sehr einfache Prozess zur Verwendung der
sqlite
Datenbank besteht darin, eine.csv
Datei mit zwei Feldern zu erstellen : Dateiname und Erweiterung. Spätersqlite
kann eine einfache AggregatanweisungCOUNT()
mit verwendet werdenGROUP BY ext
, um das Zählen von Dateien basierend auf dem Erweiterungsfeld durchzuführenquelle
files_tb
Tabelle, von der ich denke, dass sie referenziert wird, aber die Tabellenspalten sind nirgendwo definiert, wo ich sie sehen kann?printf
. Und SQLite behandelt standardmäßig die erste Zeile der CSV-Datei als Spaltennamen.Verwenden von PowerShell, wenn dies eine Option ist:
oder kürzer unter Verwendung von Aliasen:
quelle