2009-04-15 5 views
37

Je n'ai pas trouvé de raison pour laquelle la recherche de Mac n'a pas l'option -printf. Normalement, Apple prend des options qui ne sont pas orthogonales aux autres commandes?trouver manque l'option -printf, maintenant quoi?

Comment pouvez-vous atteindre le même résultat que la commande suivante dans Mac sans coreutils?

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

Répondre

36

Ce n'est pas qu'Apple supprime les options, il est que les fondements UNIX de Mac OS X sont principalement dérivés (circuitously) de FreeBSD, de nombreuses parties qui peuvent être retracées à l'UNIX d'origine ... par opposition aux utilitaires GNU , qui sont des ré-implémentations avec de nombreuses fonctionnalités ajoutées.

Dans ce cas, FreeBSD's find(1) ne prend pas en charge -printf, donc je ne m'attendrais pas non plus à OS X. Au lieu de cela, cela devrait fonctionner sur un système BSD-ish:

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

Il échouera sur un système GNU-userland, cependant, où vous écririez xargs -0 -r stat -c '%i ' parce que le comportement xargs(1) et stat(1) est différent.

+2

Pour une raison quelconque, les numéros sont imprimés au lieu de chaînes dans iTerm2 sous OS X 10.8.4. Au lieu de cela, 'gfind' du paquet' indutils' de MacPorts proposé par dmckee fonctionne bien. –

+0

C'est parce que% i imprime l'inode. –

3

Ubuntu est livré avec le GNU version of find, qui est plus riche en fonctionnalités que la trouvaille de Mac OS X, qui est de BSD.

En fait, la plupart des utilitaires user-land d'Ubuntu proviennent du projet GNU. (Ainsi, vous entendrez parfois des systèmes basés sur Linux appelés "GNU/Linux".)

13

Eh bien, ephemient et bendin ont trouvé la cause.

Je voudrais ajouter que rien ne vous empêche d'installer GNU find (à partir du findutils) si vous en avez besoin. Si vous utilisez fink il y a un findutils package. MacPorts l'a too.

+8

Vous pouvez également l'installer avec [Homebrew] (http://brew.sh/): 'brew install findutils' Utilisez' gfind' au lieu de 'find'. – MacDada

+0

l'a installé mais obtient toujours l'erreur? – 3zzy

+0

@ 3zzy Votre chemin d'accès inclut-il la version GNU? Cela vient-il avant ou après la version du système? Utiliser 'gfind' peut forcer l'utilisation de la version GNU. – dmckee

3

Alternativement, vous pouvez simplement

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

Certes, ce n'est pas comment vous feriez la même chose sur linux, mais fonctionne pour Mac OS

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

produit similaire (pas la même, mais fermer) sur Linux.

6

MAc OS X find binaire ne prend pas en charge la commande -printf. Installez brew install findutils sur votre mac. Cette installation gfind avec l'option -printf.

Questions connexes