Zählen mit "grep"

Begonnen von Bartimaus, 25 Dezember 2024, 00:13:02

Vorheriges Thema - Nächstes Thema

Bartimaus

Servus und frohe Weihnachten allerseits,

ich bräuchte mal Eure Hilfe, weil ich mit Regex auf Kriegsfuss stehe.

Ich habe auf einem Linuxserver z.B. ein Oberverzeichnis mit vielen Unterverzeichnissen:

/Photos/Urlaub_2000
       /Urlaub_2001
        Urlaub_2002

usw.
Wie kann ich mit jetzt mit "grep" oder "Find" o.ä.
eine Zählung je Verzeichnis mit Ausgabe in einer Datei machen ?

Also:
Urlaub_2000 = 254 Dateien
Urlaub_2001 = 544
Urlaub_2002 = 280

grep -c -r *.jpg /Photos/ >> Urlaub.txt
Führt leider nicht zum Erfolg. Darin werden alle gefundenen Dateien aufgelistet, obwohl nach meinem Verständnis der Parameter "-c" den Befehl zum zählen gibt

auch
find /Photos/ -type f | wc -l >> Urlaub2.txt
führt zum gleichen Ergebnis wie der Befehl mit "grep".
Ach ja, in den Zielverzeichnissen sind nur symbolische Links zu Dateien (Quelle liegt woanders)
 
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Otto123

Zitat von: Bartimaus am 25 Dezember 2024, 00:13:02obwohl nach meinem Verständnis der Parameter "-c" den Befehl zum zählen gibt
Zitat-c, --count  nur die Anzahl der passenden Zeilen pro DATEI ausgeben
Da müsstest Du erst die Datei mit der Liste der Bilder erzeugen.
Sowas funktioniert eventuell, die Ausgabe kannst Du ja formatieren
for d in /photos/*/;do echo "$d $(find $d -name *.jpg|wc -l)";done
Schöne Weihnachten
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

#2
for x in /opt/fhem/*/;do echo "$x $(find $x -maxdepth 1 -type f|wc -l)";done

ergibt:

/opt/fhem/contrib/ 99
/opt/fhem/demolog/ 10
/opt/fhem/docs/ 48
/opt/fhem/FHEM/ 615
/opt/fhem/lib/ 0
/opt/fhem/log/ 6
/opt/fhem/restoreDir/ 0
/opt/fhem/sqldb/ 6
/opt/fhem/t/ 1
/opt/fhem/thirdparty/ 1
/opt/fhem/webfrontend/ 0
/opt/fhem/www/ 0

  • die Namen von Unterverzeichnissen werden nicht mitgezählt (-type f)
  • es wird nicht rekursiv durch weitere Unterverzeichnisse gesucht (-maxdepth 1)
  • die Dateiendung der Bilddateien ist egal

Allerdings habe ich jetzt nicht getestet, ob mit "-type f" auch symbolische Links gezählt werden oder nur echte Dateien.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: betateilchen am 25 Dezember 2024, 13:18:42Allerdings habe ich jetzt nicht getestet, ob mit "-type f" auch symbolische Links gezählt werden oder nur echte Dateien.

Also wenn

Zitat von: Bartimaus am 25 Dezember 2024, 00:13:02in den Zielverzeichnissen sind nur symbolische Links zu Dateien

es tatsächlich so ist, dass NUR symbolische Links in den Verzeichnissen vorhanden sind, kannst Du statt "-type f" einfach "-type l" verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

#4
Zitat von: betateilchen am 25 Dezember 2024, 13:18:42for x in /opt/fhem/*/;do echo "$x $(find $x -maxdepth 1 -type f|wc -l)";done

ergibt:

/opt/fhem/contrib/ 99
/opt/fhem/demolog/ 10
/opt/fhem/docs/ 48
/opt/fhem/FHEM/ 615
/opt/fhem/lib/ 0
/opt/fhem/log/ 6
/opt/fhem/restoreDir/ 0
/opt/fhem/sqldb/ 6
/opt/fhem/t/ 1
/opt/fhem/thirdparty/ 1
/opt/fhem/webfrontend/ 0
/opt/fhem/www/ 0

  • die Namen von Unterverzeichnissen werden nicht mitgezählt (-type f)
  • es wird nicht rekursiv durch weitere Unterverzeichnisse gesucht (-maxdepth 1)
  • die Dateiendung der Bilddateien ist egal

Allerdings habe ich jetzt nicht getestet, ob mit "-type f" auch symbolische Links gezählt werden oder nur echte Dateien.

Perfekt, danke !

for x in /opt/fhem/*/;do echo "$x $(find $x -maxdepth 1 -type f|wc -l)";done >> Urlaube.txt
liefert das gewünschte Ergebnis (auch mit symbolischen Links). Da wär ich im Leben nicht drauf gekommen

LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bartimaus

Moin,

ein erfüllter Wunsch weckt einen neuen.

Bislang habe die die Anzahl der Dateien in einem Verzeichnis verwendet, um daraus händisch "persönliche Best-of" Listen zu generieren. (Excel)

Was ich möchte:
Ich habe z.B. 100 Ordner mit persönlichen Lieblingsstuecken.mp3 eines Interpreten/Band whatever.

Jetzt möchte ich die Gesamtanzahl der *.mp3 ermitteln um daraus einen Mittelwert (Anzahl) zu errechnen.
Diese gemittelten "Stücke" möchte ich zufallsbasiert in diverse Ordner kopieren (symbolischer Link). Die Anzahl der Stücke pro Ordner soll z.B. 100 nicht überschreiten. Die Anzahl der Ordner erfolgt dabei dynamisch, da auch die Quellordner mit der zeit wachsen.
So erhalte ich diverse Ordner wo jetzt nicht 50 Stücke von Interpret "A" drin sind, sondern wild gemischt.

Habt Ihr ne Idee, wie man sowas "automatisch" berechnen/erstellen kann ?
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

betateilchen

Dafür gibt es doch fertige Lösungen, die perfekt funktionieren.

Google mal nach "software shuffle playlist erzeugen"
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

Sowas gibts ? Cool, danke. Schaue ich mal.
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly