2013-07-09 13 views
11

Ich habe ein Skript als Teil eines Build-Prozesses für eine Anwendung geerbt, und wenn ich es auf dem Build-Server (Ubuntu Precise) läuft läuft es gut, aber wenn ich laufe es auf meinem Mac bekomme ich "illegale Option - t". Der Befehl, die Probleme ist einfach, es ist nur ein Aufruf an find hat:Unterschied zwischen Mac `find` und Linux` find`

find -type f -not -path [...] 

Beim Testen habe ich entdeckt, dass es die -type Option ist, die Probleme auf meinem Mac hat. Wenn ich stattdessen:

find ./ -type f -not -path [...] 

Es funktioniert, aber beide funktionieren (scheinbar gleichwertig) auf der Linux-Box. Daher meine Frage ist, gibt es signifikante Unterschiede zwischen OSX (BSD) find binär und dem Linux (GNU?) find und wird meine Änderung an das Skript (Hinzufügen der ./ Pfad am Anfang) brechen, was ich noch nicht entdeckt habe?

+0

Verwandte:.. Http: // stackoverflow.com/questions/752818/why-does-macs-find-not-have-the-option-printf – legoscia

+0

In Linux muss man nicht den Verzeichnisnamen oder den Pfad angeben. Standardmäßig wird das aktuelle Verzeichnis verwendet. –

+0

In mac os Angabe der Pfad oder Verzeichnis mandotary Felder –

Antwort

11

Die standard mandatiert den Pfad (./ in Ihrem Beispiel) als verpflichtend. find auf MacOS folgt dem Standard.

GNU find (der unter Linux verfügbare) ermöglicht den Pfad optional. Wenn nicht angegeben, wird das aktuelle Verzeichnis als Pfad angenommen. Unter Linux, sagt Mann finden

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 

(beachten Sie, dass angegebene Pfad innerhalb [...] bezeichnet, dass es optional ist

Es ist eine gute Praxis ist es, den Weg zu geben

+0

Ok danke, ich habe das Skript aktualisiert, um den Pfad, aber ich Ich war mir nicht sicher, ob mir einige grundlegende Syntaxunterschiede fehlten. – GTF

+0

Es kann andere Unterschiede geben, aber sie unterscheiden sich hauptsächlich in den Optionen und Tests, die sie unterstützen. Zum Beispiel unterstützt OS Xs Suche '-Bmin',' -Bnewer' und '-Btime' Tests, die die Datei überprüfen Erstellungsdatum (Inode "Geburtszeit"), welches Linux nicht hat; Auf der anderen Seite unterstützt die Suche von OS X nicht die Option -D Debugopts. Aber wenn derselbe Suchbefehl ohne Fehler auf beiden ausgeführt wird, wird es im Allgemeinen dasselbe auf beiden tun ... –