• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Suche mit find haut mir die platte voll.....

LoWang

Member
Mahlzeit ....

ich durchsuche auf meinen WebServer (CentOs) das komplette Document Root Verzeichnis nach nem bestimmten Pattern und zwar mit folgendem Befehl

Code:
find . name -exec grep -iH localhost {} \; | grep -v logs/ > localhost_suche_www

das seltsame daran ist, daß dieses File localhost_suche_www dann so groß wird bis die Platte komplett voll ist :?: :?:
Eingebaut ist ne Platte mit 133 G wovon noch 36 G frei sind (....also waren :evil: )

In diesm File sollte doch nur text drinnen stehen (hab zumindest nur solch erwartet und gesehen) .......aber 36 Gig TEXT??? das sieht doch so aus als würde jede Datei die gefunden wird in diese File rein geschrieben würde.
Kann mir das mal bitte einer erklären und vielleicht ne andere (ressourcenschonendere ) Methode sagen.

Dank im voraus und Grüße LoWang
 

admine

Ultimate Guru
Code:
find . name ...
Das scheint mir nicht vollständig.
Wonach genau willst du suchen?
Normal wäre z.B.
Code:
find . -name <name> ...
 
OP
L

LoWang

Member
Es sollen alle Dateien durchsucht werden...
name hätte ich mir eigentlich sparen können, macht aber anscheinend erstmal keinen unterschied.. habs grad getestet

es sollen alle Dateien nach 'localhost' durchsucht werden wobei die log Files dabei ausgelassen werden sollen
 

joka

Member
LoWang schrieb:
Mahlzeit ....

ich durchsuche auf meinen WebServer (CentOs) das komplette Document Root Verzeichnis nach nem bestimmten Pattern und zwar mit folgendem Befehl

Code:
find . name -exec grep -iH localhost {} \; | grep -v logs/ > localhost_suche_www

das seltsame daran ist, daß dieses File localhost_suche_www dann so groß wird bis die Platte komplett voll ist :?: :?:
Eingebaut ist ne Platte mit 133 G wovon noch 36 G frei sind (....also waren :evil: )

In diesm File sollte doch nur text drinnen stehen (hab zumindest nur solch erwartet und gesehen) .......aber 36 Gig TEXT??? das sieht doch so aus als würde jede Datei die gefunden wird in diese File rein geschrieben würde.
Kann mir das mal bitte einer erklären und vielleicht ne andere (ressourcenschonendere ) Methode sagen.

Dank im voraus und Grüße LoWang
Offenbar gerät das find in eine Endlosschleife.
EDIT: Mir ist noch auf- und eingefallen: Die Ausgabedatei localhost_suche_www liegt ja im Suchordner ("."), wird also selber durchsucht. Sobald grep eine Zeile mit Muster "localhost" findet, schreibt er sie ans Ende dieser Datei, grep liest weiter und findet wiederum diese Zeile, die er ans Ende schreibt usw..

(Der Rest meiner ersten Antwort ist dann wohl nicht mehr so interessant ..)


Grund dafür könnten Pipes sein, vielleicht auch gemountete Filesysteme: Beides kann man mit zusätzlichen Optionen -xdev und "-type f" ausschließen:
Code:
find . -xdev -type f -exec grep -iH localhost {} \; | grep -v logs/ > localhost_suche_www
Möchtest du herausfinden, wo find schleift, dann könntest du die Suche in der Konsole verfolgen. printf und ANSI-Codes machen das möglich (\r = Sprung an Zeilenanfang, \033[K = lösche bis Zeilenende):
Code:
 find .  \( ! -path '*/logs/*' \) -exec printf "\r%s\033[K" {} \; -exec grep -qi localhost {} \; -exec printf "\r%s\033[K\n" {} \;
Statt die Ausgabe nach grep -v zu pipen, filtert der Ausdruck \( ! -path '*/logs/*' \) alle Directories "logs/" aus der Suche heraus.
 
Oben