Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Befehl "Baustein in einer Datei suchen"

Empfohlene Antworten

Veröffentlicht

Hallo,

ich verzweifle gerade

Es muss doch eine Möglichkeit geben "find" mitzuteilen das er alle Dateien durchsuchen soll nach einem bestimmten Muster.

Gut das dürfte etwas dauern, ist mir in diesem Fall aber egal ;)

Ich habe folgendes Problem:

Im Ordner

/blaa/blub/*/*/*//**/*

Ist irgendwo eine Datei mit Inhalt wo ein Auschnitt "/tmp/mysql.sock" zu finden ist.

Das dumme ist, der Ordner hat noch zig Unterornder, also viel zu viele Dateien um das manuell zu durchsuchen.

Es muss doch irgendwo ein fertiges Script oder ein passender Parameter für find geben. So ein Problem habe doch nicht nur ich gehabt bis jetzt?

gruß Jens

Hi,

lass doch die gefundenen Datein mit grep durchsuchen. Würde etwa so aussehen:

find /blaa/blub/ -type f -exec grep /tmp/mysql.sock '{}' \;

cu

find . | grep "abcd" *

oder

find . | xargs grep "abcd" (falls es sehr viele Dateien sind)

Vielen Dank!

Das erste mit find hat sogar schon funktioniert!!

find /blaa/blub/ -type f -exec grep /tmp/mysql.sock '{}' \;

Unklug weil: Langsam

So wird für jede einzelne Datei einem grep aufgerufen und ein Subprozess erzeugt...das kostet unglaublich viel Zeit. Such damit mal über ein paar hundert GB...

find . | grep "abcd" *

oder

find . | xargs grep "abcd" (falls es sehr viele Dateien sind)

Nur 2 ist unklug weil: Siehe tequilaboy

Nur 1 ist unklug weil: grep würde sowohl vom stdin lesen (also das von grep) und außerdem alle Dateien im aktuellen Verzeichnis lesen (weil die Shell den Stern vor dem Aufruf von grep erweitern würde).

---

Die vernünftige Lösung sähe so aus:

find <path> -type f -name "mysql.sock" | grep "/tmp/mysql.sock"

Ist besser, weil grep ausschließlich für Pfade aufgerufen wird, in den ohnehin schon "mysql.sock" vorkommt (damit fallen 98% aller Dateien raus) und find außerdem find alle Ordner gleich überspringt (das ist sehr schnell).

Oder, falls du eine find Version hast die diese Parameter unterstützt (meine hier tut es nicht, der Parameter scheint relativ neu zu sein):

find <path> -type f -wholename "/tmp/mysql.sock"

Hi,

@Whatever

Danke für den Perfomance Tipp. werde ich dran denken wenn ich mal die besagten Datenmengen duchsuchen muss. War mir so nicht bewusst...

Was mir jetzt nicht ganz klar ist ob der Dateiname auch mysql.sock enthält oder ob dieser String nur innerhalb einer beliebigen Datei steht. Aber -uLtrA- scheint ja zufrieden zu sein ^^

cu

Wenn die Datei den String direkt im Namen hat geht es natürlich erheblich schneller (also nach dem Dateinamen suchen)

Wenn er nach dem Inhalt der Dateien sucht wird man um ein grep auf jede einzelne Datei nicht umherkommen. Langsam ist das auf jeden Fall.

"find" braucht man nicht. grep kann das auch so:

grep -r Suchtext *

z.b. durchsucht alle Dateien und Unterordner nach dem Suchtext.

Grep "kann" das nicht so, denn grep bekommt von dem Stern überhaupt nichts mit. Der Stern wird von jeder Shell(!) expandiert und durch alles Dateien und Ordner des aktuellen Verzeichnisses ersetzt, bevor grep ausgeführt wird. Versteckte Dateien und Dateien/Odner in Unterordner stehen da nicht mit drin.

Grep "kann" das nicht so, denn grep bekommt von dem Stern überhaupt nichts mit. Der Stern wird von jeder Shell(!) expandiert und durch alles Dateien und Ordner des aktuellen Verzeichnisses ersetzt, bevor grep ausgeführt wird. Versteckte Dateien und Dateien/Odner in Unterordner stehen da nicht mit drin.
Das stimmt so nicht. Unterordner werden durchsucht mit "-r". Versteckte Dateien weiß ich grad nicht.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.