Linus find String suchen

Liebe/-r Experte/-in,

Di Mai 08 15:59:00 2012

Guten Tag
Ich bin neu mit Linux Ubuntu Hardy.
Wie kann ich mit der Shell also auf der Kommandoebene suchen:

Alle Dateien auf der Festplatte oder
alle Dateien *.txt auf der Festplatte durchsuchen
und
auflisten in eine Datei erg.txt alle Dateinamen mit Ordner, die den Text:karl1234 enthalten.
Oder anderen String.

also DOS Nutzer wuerde ich sagen
das ist wohl falsch

find C:*.* „karl1234“ > c:\tmp\erg.txt
Auf der Festplatte C sollen alle Files durchsucht werden und wo der String karl1234 drin ist, soll der Dateiname in der Datei erg.txt gespeichert werden.

Vielen Dank vorweg.

Falls Sie online Workshop fuer Anfaenger kennen oder Buch Shell Linux Ubuntu: Ich will Texte bearbeiten mit Mutt vermailen und auch Firefox nutzen, Office oder Videos brauche ich alles nicht.

Gruss und Danke.

Hallo !

Auf meiner Seite sollte die Loesung des Problems zu finden sein.

http://haas.homelinux.net/index.php?option=com_conte…

Mit „find“ kann nur nach Dateinamen gesucht werden.

Viel Erfolg,

Rainer Haas

Hallo,

unter Linux hast Du für Dein Problemchen viele verschiedene Möglichkeiten - Es gib in der Konsole normal immer extrem viele kleine Progrämmchen die etwas sehr spezielles tun und wenige, die eine Breite Funktinonalität abdecken.

Deswegen kombinierst Du normalerweise ein paar davon mittels sog. „Piping“ (Ein-/Augabe Umleitung). Das wäre so z.B. ein gängiger Ansatz:

(Apropos: Verabschiede Dich von dem Denken mit den .XYZ-Suffixen das gibt es so in unix normal nicht)

  1. Alle Dateien suchen, die *.txt heissen:

find / -name „*.txt“

  1. Durchsuchen nach „karl123“

grep „karl123“

  1. Ergebnis wegschreiben als /tmp/erg.txt
    erstmal Dateien Suchen mit *.txt (Das kommt Dir bekannt vor so, denke ich)

> /tmp/erg.txt

SO und nun alles zusammen: (mit xargs: xargs ruft einen Befehl auf mit dem Input den es bekommt hinten an gehängt, meistens benutzt zusammen mit find und gefunden Dateien - ohne „xargs“ würde grep „karl123“ in den Dateinamen bzw Pfaden suchen die auf „STDInput“ von „find“ reinkommen …

find / -name „*.txt“ | xargs grep „karl123“ >/tmp/erg.txt

das Ganze sortiert sieht dann z.B. so aus:

find / -name „*.txt“ | xargs grep „karl123“ | sort >/tmp/erg.txt

Wie findest Du welches der millionen Progrämmchen du brauchst?

Hilfe auf der Konsole gibts wie folgt:

man „programmname“

z.B.

man find

man grep

man xargs

Gibt ausführlich hilfestellung (Achtung gerade find und grep haben Laaaaaange Hilfeseiten und können ziemlich viel - nicht verzagen weil zuviel zu lesen)

Wenn Du aber gar nicht weisst wie der Befehl heisst, den du suchst? Und Google grad auch nicht da ist :wink:

Versuch mal:

apropos „Schlüsselwort“ (Schlüsselwort auf englisch hilft meistens auch was zu finden)

apropos find

Gute Literatur zum Tehma:

Schau mal bei (Kostenloser Download der Bücher)

http://www.galileocomputing.de/katalog/openbook/

oder

http://www.galileocomputing.de/openbook/linux/

Da findest Du genug Lektüre für’s Wochenende - Aber auch unter LINUX bist Du nicht gezwungen in der Shell rumzuhacken (Auch wenn man so sehr produktiv sein kann)

War ein paar Tage weg, deshalb die späte Antwort. Nur kurz, morgen ausführlich:

Mit find rekursiv alle Dateinamen finden

Über die Ergebnisliste eine for-Schleife

Mit Schleifenvariable mittels grep die richtigen Dateien aussortieren

Mit Schleifenvariable Dateiname an Ergebnisliste anhängen

Ich bin neu mit Linux Ubuntu Hardy.

Hardy Heron ist die Version 8.04, ist also bereits 4 Jahre alt. Aktuell wäre 12.04 Precise Pangolin, aber das nur so am Rande.

Wie kann ich mit der Shell also auf der Kommandoebene suchen:

Alle Dateien auf der Festplatte oder
alle Dateien *.txt auf der Festplatte durchsuchen
und
auflisten in eine Datei erg.txt alle Dateinamen mit Ordner,
die den Text:karl1234 enthalten.
Oder anderen String.

Das musst du in mehreren Schritten machen, die du aber alle in ein Kommando verpacken kannst. Beispiel folgt weiter unten.

also DOS Nutzer wuerde ich sagen
das ist wohl falsch

find C:*.* „karl1234“ > c:\tmp\erg.txt

Um Verwechslungen zu vermeiden: find auf Microsoft-Sytemen macht etwas anderes als unter Linux. Es sucht nach Dateiinhalten.
Unter Linux sucht man mit find Dateien und mit grep durchsucht man deren Inhalt.

Auf der Festplatte C sollen alle Files durchsucht werden und

Unter Linux gibt es keine Laufwerke mit jeweils einzelnem Verzeichnisbaum wie bei Windows. Es gibt nur einen einzigen Verzeichnisbaum. Die Inhalte der Laufwerke werden „gemountet“, d.h. in einem Ordner angezeigt.

Hier zur Verdeutlichung zwei Bilder, beide Male mit einer Festplatte und einer SD-Karte:

Windows:
http://s14.directupload.net/file/d/2898/o63ao6jr_png…

Linux:
http://s14.directupload.net/file/d/2898/dk8tsvlr_png…

wo der String karl1234 drin ist, soll der Dateiname in der
Datei erg.txt gespeichert werden.

Also, jetzt zur Suche; zuerst das Handwerkszeug einzeln:

== Alle Dateien mit passendem Namen finden ==
find / -iname *.txt
(Suche von der Dateisystemwurzel / aus nach Dateien, deren Name zum Suchmuster passt)

== Datei nach Inhalt durchsuchen ==
grep karl1234 datei.txt
(später mit der Option -q, damit Fund oder Fehlschlag als wahr oder falsch ausgewertet werden kann)

== Gefundenen Namen an die Datei erg.txt anhängen ==
echo datei.txt >> erg.txt

=====
== Zusammengebaut zu einem Skript ergibt sich ==
(weiter unten die kommentierte Version)

echo "" \> erg.txt
for DATEI in $(find / -iname \*.txt)
do
 if grep -q karl1234 $DATEI
 then
 echo $(readlink -m $DATEI) \>\> erg.txt
 fi
done

Das kannst du entweder zeilenweise so eintippen oder alles in eine Zeile schreiben. Das sieht dann so aus:

echo "" \> erg.txt; for DATEI in $(find / -iname \*.txt); do if grep -q karl1234 $DATEI; then echo $(readlink -m $DATEI) \>\> erg.txt; fi; done

Falls Sie online Workshop fuer Anfaenger kennen oder Buch
Shell Linux Ubuntu: Ich will Texte bearbeiten mit Mutt
vermailen und auch Firefox nutzen, Office oder Videos brauche
ich alles nicht.

Ich würde einfach mal ein aktuelles Ubuntu Desktop installieren und mich mit Bashskripting vertraut machen (z.B. hier: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html), zumindest so weit es Spaß macht. Die Feinheiten kann man sich sptäer mal anschauen.
Dann solltest du die Ubuntu-Paketverwaltung kennen, sprich apt bzw. aptitude.
Wie bei fast allen Programmen hilft dir da die Manpage weiter:
man aptitude, man apt-get, etc.

Editoren: Wenn du sowieso die grafische Oberfläche benutzt, um Firefox verwenden zu können, dann kannst du als Texteditor gedit verwenden.
Für Textverarbeitung kannst du LibreOffice nutzen. (http://wiki.ubuntuusers.de/LibreOffice)
Früher oder später macht es sich bezahlt, sich mit dem Texteditor vi, bzw. vim auf der Kommandozeile anzufreunden. Die Bedienung ist sehr gewöhnungsbedürftig aber man hat ihn auf fast jedem System zur Hand und er ist sehr, sehr mächtig.
Es sollte allerdings die vollwertige Version sein, kein vim-tiny oder vim-minimal oder so.
(aptitude search vim liefert Informationen über die installierte und verfügbare Versionen von vim. aptitude install vim-common installiert die normale Version.)

Ansonsten kann ich nur noch ergänzen: Google, Google, Google… Es gibt so viele Tutorials zu Linux und Ubuntu, da kannst du dir aus jedem herauspicken was dir gerade gefällt.

Viele Grüße
Jürgen


Kommentierter Quelltext:

# Datei erg.txt mit leerem Inhalt überschreiben
echo "" \> erg.txt

# Für jedes Ergebnis der find-Suche einmal den
# folgenden Block abarbeiten; DATEI steht für 
# das jeweilige Suchergebnis
for DATEI in $(find / -iname \*.txt)
do
 # Wenn karl1234 in $DATEI gefunden wird...
 if grep -q karl1234 $DATEI
 then
 # ... dann hänge den vollen Pfad der Datei
 # an erg.txt an.
 echo $(readlink -m $DATEI) \>\> erg.txt
 fi
done

guten morgen
viele vielen dank
ich habe genau das gesucht.

vorher habe ich ca 10 bücher plus zips aus netz mit kursen
linux
ubuntu
bash
shell

das aber nicht gefunden.

ich mach erst goole und dann scrolle ich durch die kurse.

eine einfache fragen noch

ist das fuer ubuntu
oder geht das auch mit SuSe oder Slitaz etc?

ich fahre seit januar live cd hardy
und weiss noch nicth ob ubuntu.

weil zuviel drauf ist zb office was ich nicht brauche.

deswegen schaue ich

distribution linux
einfach textbasiert also kein office oder videos oder spiele
und fand zb slitaz mit 10mb iso datei.

danke also nochmal
und ich wh meine frage:

geht das skript nur in ubuntu und geht daraus sh datei dann machen?

gruss

hallo
danke
die seite ist interessant
habe ein paar seiten auf stick kopiert

danke.

also eher grep statt find
ich hatte geraten
in dem linux kurs hardy
wird von grep gesprochen.

danke nochmal

gruss

guten tag
danke.
es gibt im thread das auch ausführlich
danke.

frage: ist das für ubuntu oder geht das auch mit SuSe oder anderen linux d?

gruss und danke

guten morgen
danke fuer hilfe und literatur.

shell oder bash sieht fuer mich besser aus als klicken
weil routine sachen schneller sein sollten mit text als mit buttons.

ich starte auch zb firefox in der shell
das soll besser sein als button.

bisher war

sudo apt-get install zb gedit
immer erfolgreich
beim klicken auf

dazuinstall auf der oberfläche hat es auch schon mal geklemmt.

gruss und danke

noch eine neue zusatzfrage:

wo finde ich in linux büchern

tasks einschränken

zb

kopy aber wenn 10 minuten es dauert brich ab

oder
starte firefox aber lass gimp mit mehr priorität laufen weil ich zeichne und nur im hintergrund den freemailer aufrufen will?

danke und gruss

ist das fuer ubuntu
oder geht das auch mit SuSe oder Slitaz etc?

Grundsätzlich geht das mit jeder Linux-Distribution, auf der eine Bash-Kommandozeile zur Verfügung steht. Allerdings könnte es Probleme geben mit der Zeile

echo $(readlink -m $DATEI) \>\> erg.txt

Diese verwendet das Programm readlink und ich weiß nicht, ob das auf jedem System zur Verfügung steht. Du könntest stattdessen

echo $DATEI \>\> erg.txt

verwenden. Das hat aber unter Umständen zur Folge, dass die Suchergebnisse mit relativem Pfad angegeben werden und nicht mit absolutem. D.h. wenn du z.B. im Verzeichnis /usr/bin den Befehl ausführst und die Textdatei /usr/lib/karl.txt gefunden wird, kann es sein, dass das Ergebnis …/lib/karl.txt heißt, also von deinem derzeitigen Standort aus angegeben wird und nicht von der Dateisystemwurzel.
Damit kann man aber leben :smile:

ich fahre seit januar live cd hardy
und weiss noch nicth ob ubuntu.

Ich mag Ubuntu sehr und das hat zwei Gründe:

  • Erstens kann man - sofern eine Internetverbindung besteht - mit apt-get bzw. aptitude sehr komfortabel Programme dazuinstallieren, updaten, deinstallieren, etc.

  • Zweitens ist Ubuntu sehr beliebt und deshalb die Community sehr groß und man findet recht einfach Tutorials und auch Hilfestellung in Foren.

weil zuviel drauf ist zb office was ich nicht brauche.
deswegen schaue ich
distribution linux
einfach textbasiert also kein office oder videos oder spiele
und fand zb slitaz mit 10mb iso datei.

An die 10MB wird mein Vorschlag zwar nicht ganz rankommen, aber du kannst dir die Ubuntu-Server-Version herunterladen und bei der Installation den Installationsmodus auf minimal umstellen (F4 auf dem Bootbildschirm, wenn ich mich nicht irre). Das wird recht klein und alles was du noch brauchst installierst du mit apt-get nach.

Wichtig ist dabei, dass du in der Lage bist die Netzwerkeinstellungen von der Konsole aus vorzunehmen, sprich die Datei /etc/network/interfaces entsprechend zu konfigurieren. In einem normalen LAN zu Hause könnte diese so aussehen:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
 address 192.168.1.123
 netmask 255.255.255.0
 gateway 192.168.1.1
 dns-nameservers 192.168.1.1

Oder dein Router vergibt die Netzwerkeinstellungen automatisch (per DHCP) und es sieht so aus:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Wenn noch weitere Fragen bestehen, meld dich einfach wieder.

CU
Jürgen

guten morgen
danke für hilfe.
ich nutze hardy weil ocelot oder lucid nicth booten. sie brechen beim wechsel text modus grafifk modus zusammen.
älter als hardy geht auch booten, wegen vga problem. geht da mit f4 nicht was retten?
ABER
linus hardy booten und geht
mit win vor ein paar jahren hatte ich drei tage gebraucht bis ich online war.
basics wie gedit firefox ist alles prima.
nur den klammeraffengriff gibt es beim „absturz“ nicht und alt strg f1 schafft er nicht immer.
kann man sagen
task firefox oder task kopieren
mit niedrigen priorität oder so
dass ich immer noch taskmanager greifen kann?

wäre kubuntu xubuntu lubuntu nicht besser?

was ist ein server
was ist ubuntu server version

wenn ich auf ubuntu gehe
gibt es allein 24 versionen von ocelot.

gruss und vielen vielen danke

Hallo,

was das Ändern der Prioritäten angeht - lies mal die manpage von „nice“

Die Lösung für das „wenn älter als 10 Minuten , dann brich ab …“ wird wohl etwas komplizierter, da ein 2. prozess das timing eines anderen prozesses überwachen und daruf reagieren müsste.

Das Messen der Zeit könntest Du - mittels ‚time‘ und ausgabe in ein file lösen - zusätzlich müsstest Du ein zweites script das Output-file in einer schleife lesen und auswerten lassen und entsprechend mit „kill“ reagieren oder nicht.

Alternativ könntest Du die Prozessliste mit einem script im cron (= Scheduler, siehe „man crontab“ oder „man cron“ ) z.B jede minute starten, welches alle laufenden Prozesse (filtern wieder mit grep) nach Langläufern („ps aux“ siehe Spalte ‚TIME‘) durchsucht, und diese ebenfalls ggf., per „kill“ beendet. Oder du startest ein Programm mittels angehängtem „&“ im Hintergrund und einem danach ausgeführtem „kill“ nach 10 minuten (siehe Befehl „at“) abschiessen …

Bestimmt gibt’s auch bessere oder einfachere Ideen zum Thema, hab aber grad keine davon ;_)

hallo
danke fuer hilfe.

welcher online kurs kann zb
nice oder so sachen erklaeren

wenn ich sagen man mutt oder man find etc
dann kommt eher eine liste zum nachschlagen also fuer den profi.
danke werde nice studieren.

ist das auch bei eigenem code zu nutzen
also ich programmiere etwas in c oder pascal
nun ist fehler drin division durch null oder endlos schleife
wie kann ich den prozesse
in win exe datei starten mit parametern die sagen

wenn das zb zeit 5 minuten rum
dann brich ab.

gruss und danke