Spielereien mit Ordnern

R

Refuse2Lose

Grünschnabel
Hi,

Nachdem die letzte Frage hier so nett und schnell beantwortet wurde wollte ich euch mit meinem neuen Problem mal von der Langeweile befreien.

Ich versuche momentan ein Shell-Skript zu schreiben, das mir wenn ein Ordner über ein Gigabyte groß ist, diesen mit allen Unterverzeichnissen anzeigt um meinen Downloadordner besser zu verwalten und Ordner, die leer sind bzw. unter 5MB sind nicht anzeigt. Finde leider momentan nicht so recht nen guten Ansatz wie ich das gescheit aufbauen kann.

Gruß
Refuse2Lose
 
na ja , das sollte mit einem bashscript , dem programm du und ein paar if abfragen ohne größere Probleme machbar sein.

Musst halt die ausgabe in nen array einlesen lassen und mit awk Zeilenweise abarbeiten, oder sowas.

man bash
man du
man awk

http://www.bin-bash.de/
http://pengupedia.de/Shellscripting
http://www.fh-wedel.de/~si/vorlesungen/internet/Unix/ShellProg.html
http://www.linux-ag.de/linux/LHB/node3.html

Damit solltest du eigentlich genug infos haben um das ding selbst schreiben zu können .

Gruß Sono
 
Danke :) Genau auf der Suche nach solchen Hilfen war ich :) Dann werde ich mich wieder dran setzen und schauen was ich da so schönes basteln kann

BIG THX
 
Du könntest dir auch Perl mal anschauen.

Zumindest wenn du vorhast öfters ein paar Scripte zu schreiben. Ich hab zwar von Perl noch nicht so viel Ahnung, aber man kann wohl wesentlich mehr damit machen als mit Bashscripten.

Wenn du Material zu Perl brauchst sag bescheid.

Gruß Sono
 
Naja, um Perl wollte ich mich nachdem ich mit den grundlegenden Funktionen von der Bash zurecht komme eigentlich erst anfangen :) Habe mich jetzt durch die Seiten mal ein bisschen durchgelesen, finde aber nicht so recht ne Möglichkeit nur besondere Ordner anzuzeigen... also nen Teil für "du" mit dem man z.B. nur Ordner ab ner bestimmten Größe anzeigen kann :(
 
Auf die Schnelle:

Code:
find . -type d -exec du -sm {} \; | awk '{if ($1 > 5) print $2}'

Gruss, Phorus
 
Hallo
Ich will dir den Spaß nicht verderben, und keine fertige Lösung posten. ;)
Obwohl sowas natürlich auch mit einem perl-Einzeiler gehen würde.:D
Nagut es wär ein sehr langer.
Aber mit Shellmitteln, solltest du dich mal mit der Möglichkeit einer pipe vertrat machen.
Sprich die Ausgabe des einen Programmes in die Eingabe des nächsten schicken.

Denkanstoß für dich:
for I in $( find -type d); do du -s $I |awk '$1 > 1000000 {print $2 "ist groesser als 1000000"}'; done

Das ist nicht die Lösung, soll dir aber bei deiner Craetivität einen Denkanstoß geben.
Du könntest nun aus
du -s $I mit cut die erste Spalte auslesen und einer Variablen zuweisen und diese dann auf > 5MB testen....


Gruß Wolfgang
 
Danke für eure nette Hilfe :) Habe gerade ein bisschen mit euren Lösungsvorschlägen rumgespielt und bin dabei aber dann doch darauf gekommen, dass vl. Shell Skript doch etwas schwerer ist als ich dachte :( Habe alles mögliche versucht um das ganze zu basteln aber nichts will richtig klappen.
 
Hallo
Wo ist das Problem?
Wie sieht dein Versuch aus?

Mal so aus der Hüfte eien verbesserungswürdigen schnellschuß mit
perl :D :
Code:
perl -MFile::Find -e 'find(sub {return unless( -f $_);return if(/^(\.|\.\.)$/g); $d{$File::Find::dir}+= (-s _)/1024 },"/home/wolle");map{system("ls","-lah","$_")if $d{$_}>5000}grep{($d{$_}>10000) }keys %d'
Listet alle Verzeichnisse, deren Inhalt über 10MB sind, und deren Unterordner mehr als 5MB beinhalten hier in meinem Verzeichnis /home/wolle

Das ist aber nur ein sehr grober Schuss in's Blaue.
Ich kenne ja nichtmal deine Kriterien, nach was du die Ausgabe festlegen willst.
Sollen die Ordnergröße die Summe der darin liegenden Dateien darstellen?
Oder willst du die Summe aller unterordner mit darufzählen, was sicher etwas sinnlos ist, denn der oberste Ordner beinhaltet ja dann alle Dateien und sind immer am größten.

Naja, mach was daraus oder poste deine Versuche.

Sowas geht natürlich auch mit der shell.
Einfach ein paar verschachtelte Schleifen über Listen mit Abfragen der Bedingungen.

Im Grunde mache ich genau das mit perl.

Erst alle Ordner mit der Summe der size der enthaltenen Dateien füttern.
Die grep Funktion filtert alle raus die größer 10MB sind, und damit füttere ich die map Funktion, die ein Listing aus dem System kitzelt. Dabei habe ich diesem Aufruf ganz perl-like noch eine Bedingung (>5MB) hinterhergeworfen 8).
Sowas geht nur in perl, dafür liebe ich es. ;)
Sieht cryptisch aus, ist aber recht primitiv gelöst.
Die echten Gurus können das viel eleganter.
Gruß Wolfgang
 

Ähnliche Themen

Shell Skript zum automatischen Aufräumen von doppelten Ordnern

Last mit etc/passwd anzeigen lassen

Samba Ordner&Rechte struktur Hilfe!

Server-Monitoring mit RRDTool

Samba als PDC [Short-HOWTO]

Zurück
Oben