Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Linux (bash-script) Dateien zählen und nach Typen sortieren
Frage
Hey Leute,
ich soll ein Script unter bash schreiben, das mir alle Dateien auf einer Freigabe (die ich mir halt mounte) zählen und dann ausgeben wie viele Dateien von welchem Typ vorhanden sind. Unterverzeichnisse müssen natürlich berücksichtigt werden!
Mein bzw mein Chef sein Ansatz war folgendes =>
[code] dir -RF | grep "*" | cut -d "." -f 2 | cut -d "*" -f 1 | sort >> /usr/local/bin/dateienzaehlen/files.txt [/code]
Es wird im gemounteten Verzeichnis gesucht, durch die Paramter -RF beim dir werden an die Dateien ein Sternchen gehängt, nach dem ich dann im nächsten Schritt grepe. ich trenne durch cut die Dateiendung raus, lasse diese soriteren und schreib sie in die Datei files.txt
In der DAtei files.txt steht also z. B. folgenden
bmp
doc
doc
txt
txt
usw.....
Nun möchte ich aber noch nach Dateitypen sortiert eine AUsgabe, wie viele Dateien es von jedem Dateityp gibt und da komme ich leider nicht weiter :-(
Hat jemand eine Idee bzw mir nen Tip?
Dankeschön!!!
Gruß Jan
Antwort 1 von bored
Ich bermute, dass es dazu noch einen performanteren Weg gibt aber das erscheint mir auch so schon ausreichend schnell... zumindest hast du keinen Einsatzzweck angegeben.
Also: Bitteschön :)
Also: Bitteschön :)
#!/bin/bash
for i in `find -name "*.*" | sed 's/.*\.\(.*\)$/\1/' | grep . | sort -uf`; do
echo "$i: `find -name \"*.$i\" | wc -l`"
done
Antwort 2 von Deuchert
Hi,
ich werd das morgen früh mal testen, dankeschön!
Einsatzzweck ist folgender. Das Script soll ganze Server checken und die Anzahl an verschiedenen Dateitypen in einer Datei speichern. Wofür das nun wirklich gut sein soll weiß ich nicht, aber das ist mri egal^^
Wie schon erwähnt, danke =)
Gruß Jan
ich werd das morgen früh mal testen, dankeschön!
Einsatzzweck ist folgender. Das Script soll ganze Server checken und die Anzahl an verschiedenen Dateitypen in einer Datei speichern. Wofür das nun wirklich gut sein soll weiß ich nicht, aber das ist mri egal^^
Wie schon erwähnt, danke =)
Gruß Jan
Antwort 3 von Deuchert
Tach,
das tut einwandfrei, vielen vielen Dank!!!!
Ich hätte aber noch eine Frage bzw bitte. Könntest du mir diesen Teil vom Befehl erklären, da blick ich nicht wirklich durch^^
Gruß Jan
das tut einwandfrei, vielen vielen Dank!!!!
Ich hätte aber noch eine Frage bzw bitte. Könntest du mir diesen Teil vom Befehl erklären, da blick ich nicht wirklich durch^^
sed 's/.*\.\(.*\)$/\1/'
Gruß Jan
Antwort 4 von Deuchert
Hey,
ich stell mich grad glaub ziemlich blöd an, aber ich bekomms ums verrecken nicht hin, das die Ausgabe in eine Textdatei geschrieben wird! Ist mir jetzt bissl peinlich aber es klappt einfach net^^
Gruß Jan
ich stell mich grad glaub ziemlich blöd an, aber ich bekomms ums verrecken nicht hin, das die Ausgabe in eine Textdatei geschrieben wird! Ist mir jetzt bissl peinlich aber es klappt einfach net^^
Gruß Jan
Antwort 5 von Deuchert
Sorry für das ganze gespamme grade^^
Also ich habs hinbekommen =) Ich habe wohl zu kompliziert gedacht, hätte ja nur
ALso vielen Dank nochmal, jetzt passt alles soweit!
Gruß Jan
Also ich habs hinbekommen =) Ich habe wohl zu kompliziert gedacht, hätte ja nur
>> ausgabedatei.txt
hintendranschreiben müssen, ich habs aber mit | echo >> ausgabedatei usw probiert :DALso vielen Dank nochmal, jetzt passt alles soweit!
Gruß Jan
Antwort 6 von bored
Hallo!
sed mit Ersetzungsbefehl
.* alle Zeichen
\. : ein Punkt
\(.*\) : alle Zeichen mit ner Markierung drum rum
$: Zeilenende
ersetzen durch die Markierung
Im Endeffekt sorgt das dafür, dass nur die Dateiendungen von den Dateinamen übrigbleiben. Danach wird das mit sort -u sortiert und doppelte vorkommen nur einmal ausgegeben.
mfg
sed 's/...'
sed mit Ersetzungsbefehl
... .*\.\(.*\)$...
.* alle Zeichen
\. : ein Punkt
\(.*\) : alle Zeichen mit ner Markierung drum rum
$: Zeilenende
...\1
ersetzen durch die Markierung
Im Endeffekt sorgt das dafür, dass nur die Dateiendungen von den Dateinamen übrigbleiben. Danach wird das mit sort -u sortiert und doppelte vorkommen nur einmal ausgegeben.
mfg