2009-04-15 5 views
37

Ich habe keinen Grund gefunden, warum Macs Suche nicht die Option -printf hat. Apple entscheidet sich normalerweise für Optionen, die nicht orthogonal zu den anderen Befehlen sind?finden fehlt die Option -printf, was nun?

Wie erreichen Sie das gleiche Ergebnis wie der folgende Befehl in Mac ohne coreutils?

find . -printf "%i \n"   // command in Ubuntu 

Antwort

36

Es ist nicht, dass Apple Optionen entfernt, ist es, dass OS X UNIX Untermauerung meist abgeleitet sind (auf Umwegen) von FreeBSD, viele Teile davon wieder auf den ursprünglichen UNIX zurückverfolgt werden kann ... zu den GNU Utilities gegen Dies sind Re-Implementierungen mit vielen hinzugefügten Funktionen.

In diesem Fall FreeBSD's find(1) unterstützt nicht -printf, so würde ich nicht erwarten, OS X zu entweder. Stattdessen soll dies auf einem BSD-artiges System arbeiten:

find . -print0 | xargs -0 stat -f '%i ' 

Es basiert auf einem GNU-Userland-System scheitern würde, obwohl, wo man schreiben würde xargs -0 -r stat -c '%i ' weil xargs(1) und stat(1) Verhalten unterscheidet.

+2

Aus irgendeinem Grund werden in iTerm2 unter OS X 10.8.4 Zahlen anstelle von Zeichenfolgen gedruckt. Stattdessen funktioniert 'gfind' aus dem' indutils'-Paket von MacPorts, das von dmckee vorgeschlagen wurde, gut. –

+0

Das liegt daran, dass% i den Inode druckt. –

3

Ubuntu wird mit der GNU version of find ausgeliefert, die mehr als Mac OS X-Find, die von BSD Linie ist.

Tatsächlich stammen die meisten Ubuntu-Benutzerland-Dienstprogramme aus dem GNU-Projekt. (So ​​werden Sie manchmal Linux-basierte Systeme hören, die als "GNU/Linux" bezeichnet werden.)

13

Nun, ephemient und bendin genagelt die Ursache.

Ich würde hinzufügen, dass es nichts gibt, was Sie davon abhält, GNU find (von der findutils) zu installieren, wenn Sie es brauchen. Wenn Sie fink verwenden, gibt es eine findutils package. MacPorts hat es too.

+8

Sie können es auch mit [Homebrew] (http://brew.sh/) installieren: 'brew install fiezutils' Verwenden Sie' gfind' statt 'find' dann. – MacDada

+0

Installiert es aber immer noch den Fehler? – 3zzy

+0

@ 3zzy Enthält Ihr Pfad die GNU-Version? Kommt es vor oder nach der Systemversion? Die Verwendung von 'gfind' kann die Verwendung der GNU-Version erzwingen. – dmckee

3

Alternativ konnte man nur

find . -type f -exec stat -f "%z %N" {} \; 

Zugegeben, das ist nicht, wie Sie die gleiche Sache auf Linux tun würde, sondern arbeitet für MacOS

find . -type f -exec stat -c "%s %N" {} \; 

ähnlich erzeugt (nicht gleich, aber close) Ausgabe unter Linux.

6

MAc OS X find binary unterstützt den Befehl -printf nicht. Installieren Sie brew install findutils auf Ihrem Mac. Diese Installation wird mit der Option -printf gestartet.