-uLtrA- Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
t3quill4b0y Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 find . | grep "abcd" * oder find . | xargs grep "abcd" (falls es sehr viele Dateien sind) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-uLtrA- Geschrieben 22. März 2007 Autor Teilen Geschrieben 22. März 2007 Vielen Dank! Das erste mit find hat sogar schon funktioniert!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whatever Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 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" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
t3quill4b0y Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beebof Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 "find" braucht man nicht. grep kann das auch so: grep -r Suchtext * z.b. durchsucht alle Dateien und Unterordner nach dem Suchtext. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 22. März 2007 Teilen Geschrieben 22. März 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whatever Geschrieben 23. März 2007 Teilen Geschrieben 23. März 2007 "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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beebof Geschrieben 26. März 2007 Teilen Geschrieben 26. März 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.