Mit dem Terminal eine Datei finden?

Birke

Birke

Aktives Mitglied
Thread Starter
Dabei seit
01.11.2007
Beiträge
4.089
Reaktionspunkte
158
Huhuu!

Ich würde gerne mit dem Terminal auf meinem iPhone eine Datei finden, die einen bestimmten String enthält. Was muss ich im Terminal dazu eingeben, nachdem ich mich mittels SSH auf dem iPhone eingeloggt habe?

Danke!

Grüße, Birke
 
grep "Suchtext" /pfad/zum/verzeichnis/wo/diedatei/liegenkoennte/*

je weiter oben Du im Dateibaum suchst, je weniger genau Du also den Speicherort kennst, desto länger kann das dauern! Auchmußt Du mit einigen Zeichen im Suchtext aufpassen, ein Punkt z.B. muss durch einen Backslash escapes werden, also "10\.2009" Wenn Du "10.2009"suchen willst! Wie grep genau funktioniert und was es noch alles kann erfährst Du wenn Du "man grep" im Terminal eingibst!
 
Danke für die schnelle Antwort, Wegus!

Den Pfad kenne ich leider nicht. Daher würde ich gerne das gesamte System durchsuchen lassen.

Wäre dann:

Code:
grep "Suchtext" /

richtig?
 
Birke schrieb:
Wäre dann:

Code:
grep "Suchtext" /
richtig?

richtig ja, aber vermutlich wenig hilfreich weil Du sehr viel Fehlermeldungen für Dateien mit mangelnden Zugriffsrechten bekommst. Wenn Du es wenigstens auf Deinen Ordner oder den Applicatios-Ordner eingrenzen könntest wäre das schon besser!
 
Danke für die schnelle Antwort, Wegus!

Den Pfad kenne ich leider nicht. Daher würde ich gerne das gesamte System durchsuchen lassen.

Wäre dann:

Code:
grep "Suchtext"

richtig?

Nein, das funktioniert so leider nicht. Der Befehl grep durchsucht nur die angegebenen Dateien und nicht Verzeichnisse rekursiv.

Aber mit folgendem solltest du dein komplettes System durchsuchen können:

Code:
find / -exec grep -l "Suchtext" {} \;

Solltest du nicht mit Admin-Rechten arbeiten, kommen einige Warnungen, dass du keinen Zugriff auf das ein oder andere File hast.

Um das zu umgehen kannst du noch ein sudo vorne dranstellen:

Code:
sudo find / -exec grep -l "Suchtext" {} \;

Gruß
Dirk
 
  • Gefällt mir
Reaktionen: Birke
Aber mit folgendem solltest du dein komplettes System durchsuchen können:

Code:
find / -exec grep -l "Suchtext" {} \;

Solltest du nicht mit Admin-Rechten arbeiten, kommen einige Warnungen, dass du keinen Zugriff auf das ein oder andere File hast.

Um das zu umgehen kannst du noch ein sudo vorne dranstellen:

Code:
sudo find / -exec grep -l "Suchtext" {} \;

Danke Dirk! So scheint es zu funktionieren. Da ich mich als root angemeldet habe, wird das sudo unnötig sein, denke ich.

Hier mal mein bisheriges Suchergebnis:

Apfelfunker:~ root# find / -exec grep -l "animal" {} \;
grep: /System/Library/Carrier Bundles/Unknown.bundle/Default_CARRIER_Omnitel.png: No such file or directory
grep: /System/Library/Carrier Bundles/Unknown.bundle/FSO_CARRIER_Omnitel.png: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libCGVolute.dylib: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libCMaps.dylib: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libPDFRIP.dylib: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libRIP.dylib: No such file or directory
 
grep -R durchsucht auch rekursiv...
 
Code:
find / -exec grep -l "Suchtext" {} \;

Man kann "find" auch noch weitere Parameter mitgeben, die die Liste der zu durchsuchenden Dateien etwas einschränken:

Suche auf reguläre Dateien einschränken:
Code:
find / -type f -exec grep -l "Suchtext" {} \;

Nur Dateien mit einer bestimmten Muster im Namen (im Beispiel ".txt") durchsuchen
Code:
find / -name "*.txt" -exec grep -l "Suchtext" {} \;

Nur nach Dateien suchen, die nach einem bestimmten Zeitpunkt (im Beispiel der 1.11.2009 12:00 Uhr) geändert wurden:
Code:
touch -t 200911011200 /tmp/timestamp
find / -newer /tmp/timestamp -exec grep -l "Suchtext" {} \;
rm /tmp/timestamp
(Dateien, die älter als der Zeitpunkt sind werden mit "! -newer /tmp/timstamp" gefunden)
 
nevermind
 
Zuletzt bearbeitet:
locate ist hier aus verschiedenen Gründen leider völlig ungeeignet.

Man kann "find" auch noch weitere Parameter mitgeben, die die Liste der zu durchsuchenden Dateien etwas einschränken:
Ja. Stattdessen kann man aber auch die Z Shell verwenden und dieses Ziel etwas einfacher erreichen.
Suche auf reguläre Dateien einschränken:
Code:
find / -type f -exec grep -l "Suchtext" {} \;
Z Shell:
Code:
grep "Suchstring" /**/*(.)

Nur Dateien mit einer bestimmten Muster im Namen (im Beispiel ".txt") durchsuchen
Code:
find / -name "*.txt" -exec grep -l "Suchtext" {} \;
Z Shell:
Code:
grep "Suchstring" /**/*txt(.)

Nur nach Dateien suchen, die nach einem bestimmten Zeitpunkt (im Beispiel der 1.11.2009 12:00 Uhr) geändert wurden:
Code:
touch -t 200911011200 /tmp/timestamp
find / -newer /tmp/timestamp -exec grep -l "Suchtext" {} \;
rm /tmp/timestamp
(Dateien, die älter als der Zeitpunkt sind werden mit "! -newer /tmp/timstamp" gefunden)
Z Shell (z.B. Änderung vor weniger als 10 Tagen):
Code:
grep "Suchstring" /**/*txt(.m-10)
Stunden, Wochen, Monate usw. gehen natürlich auch. Außerdem natürlich vor mehr als oder genau vor 10 Tagen sowie Prüfung auf access time oder change time.

Z Shell rulez ;)
 
man kann auch in jeder shell
grep -R "Suchtext" /
machen ;)
 
Sicher — aber da werden halt ungefiltert alle Dateien durchsucht.
Möchte man vielleicht nicht immer.
 
Ich habe mal nach einem Begriff auf dem iPhone via SSH gesucht und folgendes Ergebnis bisher erhalten. Wenn ich das richtig verstehe wird das sehr lange dauern da er so jede Datei nach diesem Begriff durchsucht?

Apfelfunker:~ root# grep -R "Mein_SuchText" /

grep: /System/Library/Carrier Bundles/Unknown.bundle/Default_CARRIER_Omnitel.png: No such file or directory
grep: /System/Library/Carrier Bundles/Unknown.bundle/FSO_CARRIER_Omnitel.png: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libCGVolute.dylib: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libCMaps.dylib: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libPDFRIP.dylib: No such file or directory
grep: /System/Library/Frameworks/CoreGraphics.framework/Resources/libRIP.dylib: No such file or directory
grep: /User/AppLinks/Deliveries.app: No such file or directory
Binary file /User/AppLinks/Newsstand2.app/Documents/Newsstand2.sqlite matches
Binary file /User/Applications/89F82E7E-442F-4638-824C-210EC4790DA3/Documents/Newsstand2.sqlite matches
grep: /User/Library/Carrier Bundle.bundle/Default_CARRIER_Omnitel.png: No such file or directory
grep: /User/Library/Carrier Bundle.bundle/FSO_CARRIER_Omnitel.png: No such file or directory
grep: /User/Library/Operator Bundle.bundle/Default_CARRIER_Omnitel.png: No such file or directory
grep: /User/Library/Operator Bundle.bundle/FSO_CARRIER_Omnitel.png: No such file or directory
 
Ja prima! Genau das wollte ich ja. :)
 
Zurück
Oben Unten