Найти недостаток вариант -printf, теперь что?

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

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

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

Ответ 1

Это не то, что Apple удаляет опции, это то, что ОС XIX UNIX основывается главным образом на выходе из FreeBSD, многие части которого можно проследить до исходного UNIX... в отличие от утилит GNU, - добавлены дополнительные функции.

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

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

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

Ответ 2

Ну, ephemient и bendin пригвоздил причину.

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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