merkwürdiges Verhalten von find

Hallo Experten,
warum erhalte ich mit dem Befehl

find /etc -iname K[0-9]\*

je nachdem in welchem Verzeichnis ich mich befinde, unterschiedliche Ergebnisse?

tux@Merkur:~$ pwd
/home/tux
tux@Merkur:~$ sudo find /etc -iname K[0-9]\*
/etc/rc1.d/K20gpm
/etc/rc1.d/K20couchdb
/etc/rc1.d/K15pulseaudio
/etc/rc1.d/K10jackd
/etc/rc1.d/K20saned
/etc/rc1.d/K20kerneloops
/etc/rc1.d/K20clamav-freshclam
/etc/rc1.d/K20smartmontools
/etc/rc1.d/K20virtualbox-ose
/etc/rc1.d/K20acpi-support
/etc/rc1.d/K09apache2
/etc/rc1.d/K77ntp
/etc/rc1.d/K20autokey
/etc/rc1.d/K20rsync
/etc/rc1.d/K20winbind
/etc/rc1.d/K80cups
/etc/rc1.d/K20cinestart
/etc/rc1.d/K99laptop-mode
...

während der Befehl aus dem Verzeichnis /etc/rc2.d/ abgesetzt, nur wenige Dateien findet:

tux@Merkur:/etc$ cd /etc/rc2.d/
tux@Merkur:/etc/rc2.d$ sudo find /etc -iname K[0-9]\*
/etc/rc2.d/K50pulseaudio
/etc/rc3.d/K50pulseaudio
/etc/rc5.d/K50pulseaudio
/etc/rc4.d/K50pulseaudio
tux@Merkur:/etc/rc2.d$

Eigentlich gibt doch der erste Parameter /etc an, dass ab diesem Verzeichnis gesucht werden soll, egal wo ich mich selbst befinde.

Vielen Dank schon mal
Jan

Hi Jan,

das ist das normale Shell verhalten. Da du die Regex nicht vor der Shell versteckst wird zuerst versucht diese aufzulösen. In deinem Homeverzeichnis wird keine Datei liegen, die dem Muster der Regex entspricht und daher nicht weiter komplettiert und find mit der Regex ausgeführt.
In /etc/rc2.d findet die Shell aber die Datei K50pulseaudio und ersetzt die Regex mit dem Dateinamen. Daher werden dort nur noch alle Vorkommen von K50pulseaudio gefunden.

Wenn du in deinem Homeverzeichnis eine Datei auf die die Regex passt erstellst, z.B. K50pulseaudio, und dann das find von dort ausführst, wirst du auch nur diese im Ergebnis finden.

Um das Problem zu beheben muss die Regex mit " vor der Shell versteckt werden.

find /etc -iname "K[0-9]\*"

Gruß
Martin

Hallo Martin,

das ist das normale Shell verhalten. Da du die Regex nicht vor
der Shell versteckst wird zuerst versucht diese aufzulösen

Um das Problem zu beheben muss die Regex mit " vor der Shell
versteckt werden.

find /etc -iname „K[0-9]*“

Vielen Dank, das habe ich jetzt verstanden. Das heisst ja wohl, dass man bei find sicherheitshalber die Regex immer mit Anführungszeichen vor der Shell verstecken sollte? Hatte ich bisher nie gemacht und wahrscheinlich bisher bloss Glück gehabt, dass solche Effekte nicht aufgetreten sind.

Viele Grüsse
Jan