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