Supportnet Computer
Planet of Tech

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 :)

#!/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

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^^

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

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
>> ausgabedatei.txt 
hintendranschreiben müssen, ich habs aber mit | echo >> ausgabedatei usw probiert :D

ALso vielen Dank nochmal, jetzt passt alles soweit!

Gruß Jan

Antwort 6 von bored

Hallo!

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: