Einfaches Filtern aus einer Liste

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mod3

Einfaches Filtern aus einer Liste

Beitrag von mod3 » 01.03.2013 10:04:55

Guten Morgen,

ich möchte aus meinen Home-Verzeichnissen all jene auslesen, bei denen der Ordner "Desktop" mindestens 1GB groß ist.
Mit dem derzeitigen Befehl bekomme ich zwar die Verzeichnisgrößen geliefert, aber keine Nutzernamen dazu.
Wie kann ich diese noch einfügen?
Eine Ausgabe nach dem Typ

Code: Alles auswählen

1,5G Mueller
wäre optimal.

Grüße,
mod3


Code: Alles auswählen

find /home/mitarbeiter/*/winxp_profile/Desktop -maxdepth 1 -exec du -h {} \; | awk '{print $1}' | grep G

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Einfaches Filtern aus einer Liste

Beitrag von uname » 01.03.2013 10:12:53

Vielleicht so. Konnte es aber nicht ganz korrekt nachstellen.

Code: Alles auswählen

du -h /home/mitarbeiter/*/winxp_profile/Desktop --max-depth 0
Die Formatierung nur nach Benutzern musst du noch irgendwie z.B. mit awk und die Suche nach "G" mit grep zusammenbauen.

mod3

Re: Einfaches Filtern aus einer Liste

Beitrag von mod3 » 01.03.2013 10:23:54

Naja, das Auflisten der Verzeichnisgrößen funktioniert schon korrekt, es geht mir eben darum, die Nutzernamen noch darzustellen.

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Einfaches Filtern aus einer Liste

Beitrag von goeb » 01.03.2013 11:11:27

Der Benutzer steht doch in der Ausgabe von du drin, einfach mit ausgeben, z.B. (angepasst auf ein Verzeichnis das bei mir existiert):

Code: Alles auswählen

du -h /home/*/projects --max-depth 0 | awk -F '[\t/]' '$1 ~ /G$/ {print $1 " " $3}'
(Der Benutzername ist bei mir $3, und wäre bei dir dann $4.)

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Einfaches Filtern aus einer Liste

Beitrag von Meillo » 01.03.2013 11:40:01

goeb hat geschrieben:Der Benutzer steht doch in der Ausgabe von du drin, einfach mit ausgeben, z.B. (angepasst auf ein Verzeichnis das bei mir existiert):

Code: Alles auswählen

du -h /home/*/projects --max-depth 0 | awk -F '[\t/]' '$1 ~ /G$/ {print $1 " " $3}'
(Der Benutzername ist bei mir $3, und wäre bei dir dann $4.)
Schoen.

Nun zur Portabilitaet. ;-)

Man sollte `--max-depth 0' durch `-s' ersetzen, weil `-s' in POSIX spezifiziert ist und weil:
Manpage von du(1) hat geschrieben: --max-depth=0 is the same as --summarize
Der zweite notwendig Schritt ist das unportable (wenn auch praktische) `-h' wegzubekommen. Man kann dazu `-k' verwenden, muss dann aber bei awk statt dem Patternmatching `$1 ~ /G$/' Kilobytes vergleichen: `$1 > 1024*1024'.

Code: Alles auswählen

du -sk /home/*/projects | awk -F '[\t/]' '$1 > 1024*1024 {print $1 " " $3}'
Das sollte auf allen POSIX-kompatiblen Systemen funkionieren.
Use ed once in a while!

mod3

Re: Einfaches Filtern aus einer Liste

Beitrag von mod3 » 01.03.2013 13:03:25

Wunderbar, es funktioniert, danke euch :-)

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Einfaches Filtern aus einer Liste

Beitrag von linuxCowboy » 01.03.2013 13:06:09

Interessante Frage, gute Lösungen.

Hier ist noch ein Vorschlag mit Perl:

Code: Alles auswählen

du -sh /home/mitarbeiter/*/winxp_profile/Desktop | perl -F/ -naE 'say "$F[0] $F[3]" if /^\S+G/'
Das --human-readable behalte ich für eine besser lesbare Ausgabe bei.

-der_linux_cowboy
-der_linux_cowboy --- Besser werden! ... f*** w$$

Antworten