find vs, GNU find

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
hallo zusammen,

In GNU find (nicht auf Mac OS X) steht in der manpage im Bereich "OPERATORS" an letzter Stelle folgender Eintrag:
Code:
expr1 , expr2
       List;  both  expr1  and  expr2  are always evaluated.  The value of
       expr1 is discarded; the value of the list is the value of expr2.
Der Komma Operator ist im Mac OS X find nicht enthalten.

Fragen:
Gibt es GNU find auch für Mac OS X? Gefunden habe ich nichts.
Was macht dieser Komma Operator überhaupt genau, wenn der Wert verworfen wird?
Gibt es eine Möglichkeit, die Funktion des Komma Operators in "unserem" find nachzuahmen?
 
maceis schrieb:
Gibt es GNU find auch für Mac OS X? Gefunden habe ich nichts.

Wie sieht es mit fink aus, oder manuellem Eigenbau? Ha! Ne, hier, darwinports:
http://findutils.darwinports.com/
"Description: findutils contains the GNU find, xargs, and locate programs"

maceis schrieb:
Was macht dieser Komma Operator überhaupt genau, wenn der Wert verworfen wird?

Hm...:
"The comma operator can be useful for searching for several different types of thing, but traversing the filesystem hierarchy only once. The -fprintf action can be used to list the various matched items into several different output files."

Browse mal hier hin:
http://www.gnu.org/software/findutils/manual/html_mono/find.html
und Suche nach "comma operator", da kommen ein paar Beispiele wie dieses hier:

find / -type d \( -perm -o=w -fprint allwrite , \
-perm -o=x -fprint allexec \)

Mit einem Suchbefehl kannst du zwei getrennte Listen erzeugen.


Tja. Ich muss sagen, meine beiden größten Fehlurteile, seit ich mich mit Computern beschäftige, waren:

1. "Ein DNS-Server aufzusetzen kann nciht sehr anspruchsvoll sein. Was kann da schon groß drinstehen - eine Liste mit Namen und IPs.". Hoppla. Mein erster bind8 dauerte zwei Wochen.

2. Ein Befehl zum Suchen von Dateien, meine Güte, was soll da schon groß kompliziertes zu verstehen sein... und dann kam GNU find. =%-)

Gruß,
Jörg
 
Fink? - Nein, danke.

darwinports: Ich sollte meiner Augen untersuchen lassen :D:
Code:
port search find
...
findutils                      sysutils/findutils @4.2.25       findutils contains the GNU find, xargs, and locate programs
...

Bei meinem aktuellen Problem geht es um folgende expression:
Code:
-type d -name FOO -prune -false , -type d -name BAR
Als Ergebniss soll ein Verzeichnis BAR gefunden werden, dass aber nicht unterhalb von FOO liegen darf.
Bis zum "-prune" ist mir das klar und nach dem Komma auch wieder.
wie das "-false , expression" in diesem Beispielfunktioniert ist mir aber immer noch unklar :confused:.
 
maceis schrieb:
Bei meinem aktuellen Problem geht es um folgende expression:
Code:
-type d -name FOO -prune -false , -type d -name BAR
Als Ergebniss soll ein Verzeichnis BAR gefunden werden, dass aber nicht unterhalb von FOO liegen darf.
Bis zum "-prune" ist mir das klar und nach dem Komma auch wieder.
wie das "-false , expression" in diesem Beispielfunktioniert ist mir aber immer noch unklar :confused:.

Hm. Ich bin nicht der find-Profi, aber ich würde mal sagen, der find-Befehl findet prinzipiell erst mal sowohl die BAR- als auch die FOO-Resultate. Das "false" macht aber die BAR-Fundstellen ungültig, und das betrifft eben auch alle, die FOO *und* BAR findet. Man muss sich wohl die Parameterliste am Komma getrennt vorstellen in einen FOO-Teil und einen BAR-Teil.

Also:

Nur BAR gefunden = Fundstelle

Nur FOO gefunden = eigentlich Fundstelle, durch -false aber doch nicht.

FOO und BAR gefunden: Fundstelle für den FOO-Teil, durch die höhere Priorität des BAR-Teils (Linke Hälfte der Komma-Liste enthält Resultat!) aber "entwertet".

FOOrchtBAR. ;-)

Gruß,
Jörg
 
ratti schrieb:
...
Also:

Nur BAR gefunden = Fundstelle

Nur FOO gefunden = eigentlich Fundstelle, durch -false aber doch nicht.

FOO und BAR gefunden: Fundstelle für den FOO-Teil, durch die höhere Priorität des BAR-Teils (Linke Hälfte der Komma-Liste enthält Resultat!) aber "entwertet".
...
manpage: "expr1 , expr2
The value of expr1 is discarded; the value of the list is the value of expr2."
Das hatte ich so interpretiert:
Nur FOO gefunden => keine Fundstelle, da "value of the list is the value of expr2".

Ich glaub jetzt hab ich's :D.

Meine Verwirrung entstammt dem Unterschied von '-false' in GNU find und "unserem" find.
Mac OS X find:
-false expression
-not expression
This is the unary NOT operator. It evaluates to true if the expression is false.
GNU find:
-false Always false

Durch -prune wird der Teil vor dem "," true, wenn FOO gefunden wird; durch -false wieder falsch.
Zusätzlich wird unterhalb von FOO nicht weitergesucht (darauf kommt es hier an, ein BAR unterhalb von FOO soll nicht gefunden werden).
Hast also Recht ;)

Danke für die Hilfe.
ratti schrieb:
...
FOOrchtBAR. ;-)
In der Tat :D.
 
Zurück
Oben Unten