• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Nach Links durchkämmen (nur aus Neugier)

Hallo Leute

Ich wollte nur mal so aus Neugier versuchen ob es geht das man sein komplettes System nach Links durchkämmt.

Habe verschiedene Befehlsketten und Variationen auf der Kommandozeile probiert, aber komme irgendwie auf keinen Grünen Zweig.

zB:
Code:
for datei in `find /home/trommel/.kde/`; do cat "${datei}" 2> /dev/null | grep 'http' | grep www ; done
Hier zB fängt es schon mal damit an das die Fehlermeldungen schon mal nicht nach /dev/null wandern, sondern auf Kanal 1 mit ausgegeben werden.
Ausserdem geht mittendrin plötzlich nichts mehr vorwärts. Jetzt habe ich in diesem Beispiel aber gerade mal auf .kde begrenzt.

FRAGE:
Nur mal so aus Neugier! Ist es überhaupt möglich sein komplettes System nach Links zu durchkämmen?
Wenn ja, wie?

Gruß Peter
 
Hi Trommelpeter,
da sind gleich mehrere "Unzulänglichkeiten" in der Zeile.

- Die Umleitung stderr => /dev/null gilt nur für "cat", find bringt aber die Fehler
- Die Variable heißt zwar "datei" wird aber so ziemlich alles, von named pipes,sockets über directory, etc enthalten.
- named pipes "hängen" dann beim cat wenn niemand in die Pipe schreibt...

Ich würde das so suchen:

find /home/trommel/.kde/ -type f -exec grep http: {} \; 2>/dev/null | grep www

Vorteile
- keine Schleife notwendig
- 2>/dev/null gehört zum find
- -type f schränkt ein auf Files

Wenn du auch noch die Dateinamen mit haben möchtest könntest du grep so modifizieren:
(geht nur mit gnu-tools, also unter Linux )
grep -H http: {}
(geht auch bei grep auf anderen UNIX )
grep -H http: {} /dev/null

Haveaniceday
 
trommelpeter schrieb:
Hier zB fängt es schon mal damit an das die Fehlermeldungen schon mal nicht nach /dev/null wandern, sondern auf Kanal 1 mit ausgegeben werden.
Na logisch. Wo leitest du denn auch die Fehlerausgabe von find hin? Tja...
Code:
find /bla -type f -print0 2>/dev/null | xargs -0 grep -Po 'http://(\S+)' 2>/dev/null
 
OP
T

trommelpeter

Member
Hallo beide

:oops: Wie ist es möglich das ich einerseits schon Ellenlange Scripte basteln kann und dann oft auf die einfachsten Sachen nicht komme?
Ist ja eigentlich klar das ich die richtigen Fehler nach /dev/null leiten muss.

Hin und wieder brauche ich doch mal einen Schubs von der Leitung :)

Danke für die tollen Vorschläge erstmal.

Ich habe mich jetzt für den entschieden:
Code:
find /bla -type f -print0 2>/dev/null | xargs -0 grep -Po 'http://(\S+)' 2>/dev/null

Dazu habe ich noch zwei Fragen:
1. Was macht da grep eigentlich genau?
2. Wie kann ich den Link nun vom Rest endgültig isolieren?
Im Moment sieht die Ausgaben noch so aus:
ein Beispiel:
/home/trommel/.kde/share/apps/kmail/mail/sent-mail/cur/1201463339.4639.AZWGW:2,S:http://www.tagesschau.de/inland/index.html

Gruß Peter
 
Oben