найти не хватает опции -printf, что теперь? - PullRequest
45 голосов
/ 15 апреля 2009

Я не нашел причину, по которой в поиске Mac нет опции -printf. Apple обычно решает убрать опции, которые не ортогональны другим командам?

Как добиться того же результата, что и следующая команда в Mac без coreutils?

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

Ответы [ 5 ]

44 голосов
/ 15 апреля 2009

Дело не в том, что Apple удаляет опции, а в том, что основа UNIX для OS X в основном получена (по схеме) из FreeBSD, многие части которой можно проследить до исходного UNIX ... в отличие от утилит GNU, -реализации с добавлением многих функций.

В этом случае FreeBSD find(1) не поддерживает -printf, поэтому я не ожидаю, что OS X тоже. Вместо этого это должно работать в BSD-системе:

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

В системе GNU-userland произойдет сбой, однако вы бы написали xargs -0 -r stat -c '%i ', потому что поведение xargs(1) и stat(1) отличается.

18 голосов
/ 15 апреля 2009

Ну, Эфимент и Бендин прибили причину.

Я бы добавил, что ничто не мешает вам установить GNU find (из findutils ), если вам это нужно. Если вы используете fink , существует пакет findutils . MacPorts имеет тоже .

15 голосов
/ 30 августа 2015

MAc OS X find binary не поддерживает команду -printf. Установите brew install findutils на свой Mac. Эта установка gfind с параметром -printf.

6 голосов
/ 06 августа 2010

В качестве альтернативы, вы можете просто

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

Конечно, это не то, как вы бы делали то же самое в Linux, но работает для MacOS

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

производит аналогичный (не такой же, но близкий) вывод в linux.

3 голосов
/ 15 апреля 2009

Ubuntu поставляется с GNU-версией find , которая более функциональна, чем Mac OS X, которая имеет BSD происхождение.

Фактически, большинство утилит Ubuntu для работы с пользовательскими землями происходит из проекта GNU. (Таким образом, вы иногда будете слышать системы на основе Linux, называемые «GNU / Linux».)

...