[gelöst] Probleme mit find-Parameter

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

[gelöst] Probleme mit find-Parameter

Beitrag von ReturnToSender » 10.01.2019 19:11:30

Hallo

Ich bin zufällig beim Suchen nach Dateien auf etwas gestoßen, was mir zuvor nie aufgefallen ist. Ist wohl eine seltene Konstellation. Jetzt weiss ich nicht, ob ich hier einen Fehler mache, meine Erwartungshaltung vielleicht falsch ist, oder ob das schlichtweg ein Bug ist.

Folgende Test-Umgebung. Ich habe mit touch 2 Dateien in meinem Homedir angelegt und denen jeweils abweichend von mir als Eigentümer (Jimmy) einmal eine andere Gruppe und einmal einen anderen Besitzer vergeben. find kommt damit zu diesen Ergebnissen:

Code: Alles auswählen

ls zx*
-rw------- 1 jimmy  uucp   1,0K 2018-09-05 12:28 zxaaa
-rw------- 1 uucp   jimmy  1,0K 2018-09-05 12:28 zxbbb

find ~ * -group uucp -print
/home/jimmy/zxaaa

find ~ * -user uucp -print
/home/jimmy/zxbbb

find ~ * -user uucp -o -group uucp -print
/home/jimmy/zxaaa

find ~ * ! -user jimmy -o ! -group jimmy -print
/home/jimmy/zxaaa
Am Ende klappt also die booleansche OR-Verknüpfung nicht. Aufgefallen ist mir das, weil ich Dateien mit ! (NOT) gesucht habe, die nicht dem User gehören. Beides zusammen OR-verknüpft klappt weder direkt noch mit NOT. Im Moment glaube ich noch an einen Bedienerfehler als wahrscheinlichste Ursache für die falsche Ausgabe der 2 letzten find-Versuche.
Zuletzt geändert von ReturnToSender am 10.01.2019 20:25:12, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme mit find-Parameter

Beitrag von heisenberg » 10.01.2019 19:38:16

find funktioniert ein kleines bisschen anders, als wie man sich das vielleicht denken mag.

Code: Alles auswählen

find ~ * -user uucp -o -group uucp -print
Jede der Optionen ist, wenn nicht angegeben logisch mit allen anderen verknüpft. Die Option sind: -user -group und -print ! Wenn keine Verknüpfung angegeben ist, dann ist die Vorgabe: AND und AND hat eine höhere Bindungspriorität als OR, was du angegeben hast.

D. h. Dein obiger Befehl bedeutet eigentlich...

Code: Alles auswählen

find ~ * -user uucp -o -group uucp -a -print
Das bedeutet, das print nur ausgeführt wird, wenn -group uucp zutrifft.

Das was Du aber möchtest ist das...

Code: Alles auswählen

find ~ * \( -user uucp -o -group uucp \) -a -print
Das schützen der Klammern durch \ ist notwendig, damit die Shell diese nicht interpretiert.
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

Re: [gelöst] Probleme mit find-Parameter

Beitrag von ReturnToSender » 10.01.2019 20:27:52

Es funktioniert, ich glaubs ja kaum. :) Das der Ausgabe-Parameter hier als Bestandteil der Selektionsbedingungen interpretiert wird, da wäre ich in 100 Jahren nicht drauf gekommen. Ich glaube, sowas kann man auch nur lernen, wenn man das gesagt/gezeigt bekommt.

Danke! :THX:

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] Probleme mit find-Parameter

Beitrag von heisenberg » 10.01.2019 20:40:46

ReturnToSender hat geschrieben: ↑ zum Beitrag ↑
10.01.2019 20:27:52
Das der Ausgabe-Parameter hier als Bestandteil der Selektionsbedingungen interpretiert wird, da wäre ich in 100 Jahren nicht drauf gekommen.
Bei mir hat's nur 40 Jahre gedauert. Hast Du mal die find man-page gelesen?
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

Re: [gelöst] Probleme mit find-Parameter

Beitrag von ReturnToSender » 10.01.2019 20:53:12

heisenberg hat geschrieben: ↑ zum Beitrag ↑
10.01.2019 20:40:46
Bei mir hat's nur 40 Jahre gedauert. Hast Du mal die find man-page gelesen?
Ja, rauf und runter. Das ist immer das erste, was ich mache. Dann im Web nach Erklärungen suchen. Aber ich glaube, da war ich wohl eher Opfer einer kognitiven Blockade oder meiner eigenen Erwartungshaltung, so nach dem Motto "Was nicht sein darf, kann auch nicht sein". Condition ist das eine, Output ist das andere... so war hierbei wohl mein Denken, alles zusammen als einen Ausdruck zu sehen war einfach zu weit weg. Und wieder was dazu gelernt. :)

Antworten