find-Kommando: Frage zu Tests und logischen Operatoren

S

siradlib

Grünschnabel
Hallo zusammen,

folgende Aufgabenstellung: Ich suche Dateien, die entweder zur group "mygroup" oder dem User "myuser" gehören. Die Dateinamen sollen ausgegeben werden. Verwendet wird Red Hat Linux mit der bash.

  • so funktionierts:
    Code:
    find / \( -group mygroup -o -user myuser \) -ls
  • so nicht:
    Code:
    find / -group mygroup -o -user myuser -ls

Frage: Warum funktioniert es ohne die Klammern, die meines Wissens nach nur die Präzendenz (Wertigkeit) der Tests verändern können, nicht?

Dankeschön!

LG siradlib
 
Wie sollte find sonst "wissen", welche Optionen da mit ODER verknüpft werden sollen? Soll es raten? :)
 
Wie sollte find sonst "wissen", welche Optionen da mit ODER verknüpft werden sollen? Soll es raten? :)
Nein, das ist nicht der Grund - find muesste nicht raten, da die Auswertung von logischen Ausdruecken - nunja - logisch ist. Der eigentliche Grund findet sich in der Reihenfolge, in der Operatoren angewandt werden:
man find schrieb:
expr1 expr2
Two expressions in a row are taken to be joined with an implied
"and"; expr2 is not evaluated if expr1 is false.
Diese Regel kommt vor '-or', so dass der Ausdruck ohne Klammern fuer find bedeutet
Code:
find / -group mygroup -o \(-user myuser -ls\)
Ich weiss nicht, zu was '-user myuser -ls' evaluiert, aber wahrscheinlich ist es immer falsch oder immer richtig.
 
tgruene, das klingt logisch- Danke!

'-ls' müßte immer richtig/wahr sein, da Kommando
'-user myuser' ist dann richtig/wahr, wenn eine Datei/ein Verzeichnis dem User myuser gehört
 

Ähnliche Themen

"net groupmap list" und "pdbedit" funktionieren nicht

Die unerklärlichen Mysterien des find Befehls?

Zurück
Oben