Ist es ein Fehler, wenn ich Folgendes find ./path/here/
bekomme:
./path/here//foo
./path/here//bar
Ich weiß, find
dass ich den Pfad ohne den abschließenden Schrägstrich angeben soll, aber es kann doch sicher den Pfad erkennen, den die Tab-Vervollständigung hinterlässt, und seine Ausgabe entsprechend anpassen. Gibt es einen Grund, warum es das nicht tut?
Antwort1
Technisch gesehen ist es ein Fehler, dennPOSIX-ZuständeDas
Alle Pfadnamen für andere Dateien in der Hierarchie bestehen aus der Verkettung des aktuellen Pfadoperanden, einem <Schrägstrich>wenn der aktuelle Pfadoperand nicht mit einem endetund der Dateiname relativ zum Pfadoperanden
Aberder doppelte Schrägstrich macht keinen Unterschied, daher sind ./path/here//foo
und ./path/here/foo
immer dieselbe Datei. (Bei einigen Unix-Varianten macht ein doppelter Schrägstrich einen Unterschied, wenn er am Anfang des Pfads steht. Wenn das bei Ihnen der Fall ist, find
wird dieser Fall hoffentlich speziell behandelt.)
Antwort2
Zur Info: Ein Grund, warum man find some/dir/
anstelle von verwenden könnte, find some/dir
ist, wenn some/dir
es sich eigentlich um einen symbolischen Link zu einem Verzeichnis handelt und Sie find
Dateien in dem Verzeichnis suchen möchten, auf das dieser symbolische Link verweist.
Aber in diesem Fall gibt es eine bessere Alternative:
find -H some/dir
-H
ist eine Option, die von einigen POSIX-Dienstprogrammen ( ls
, cp
, chmod
...) unterstützt wird und die das Dienstprogramm anweist, symbolischen Links zu folgen, die als Argumente übergeben werden (und nur diesen, nicht zu verwechseln mit -L
/ -follow
, das dazu führt, find
dassjedenSymlink, die als Argumente übergebenen, aber auch die während der Verzeichnisdurchquerung gefundenen).
Das ist immer noch nicht funktional gleichwertig mit find some/dir/
dem Fall, in dem some/dir
es sich eigentlich nicht um ein Verzeichnis handelt. In diesem Fall find some/dir/
würde es mit einemKein VerzeichnisFehler, während find -H some/dir
diese Nicht-Verzeichnisdatei aufgelistet wird.