Veröffentlicht 22. März 200718 j 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
22. März 200718 j 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
22. März 200718 j find . | grep "abcd" * oder find . | xargs grep "abcd" (falls es sehr viele Dateien sind)
22. März 200718 j 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"
22. März 200718 j 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
22. März 200718 j "find" braucht man nicht. grep kann das auch so: grep -r Suchtext * z.b. durchsucht alle Dateien und Unterordner nach dem Suchtext.
22. März 200718 j 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.
23. März 200718 j "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.
26. März 200718 j 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.