В Linux find -type d работает для вывода списка всех подкаталогов, игнорируя файлы.

Однако, когда я запускаю это на Mac (High Sierra), я получаю ошибку: find: illegal option -- t .

Окунувшись в Google, я не нашел какой-либо очевидной альтернативы для эквивалента командной строки, за исключением ответов, предлагающих использовать ls и анализировать вывод через grep , или иметь решения для приложений с графическим интерфейсом или для пользователей, не использующих командную строку (через finder , так далее.).

Сценарий использования должен был бы передать этот вывод нечеткому искателю, который ожидает разделенный строкой список элементов. Например, я могу сделать это с помощью файлов и ripgrep с помощью: rg --files -g "" | fzy . Ripgrep, похоже, не поддерживает опцию --folders или что-то подобное из моего краткого обзора трекера GitHub.

В Linux find -type d | fzy "просто работает". Вплоть до установки других пакетов, но я очень надеялся на то, что просто предустановлено.

Я могу уйти от этого с помощью некоторых сценариев, но я бы хотел услышать о лучшей практике здесь.

1 ответ1

4

Я думаю , что ваша find понимает -type d , потому что это требует POSIX. Однако синтаксис, который вы использовали:

find -type d

не POSIX-совместимый, поэтому не переносимый. Правильный переносимый синтаксис:

find path -type d

Версии Linux для find будут предполагаться ./ если вы пропустите path . На Mac find ожидает что-то вроде этого:

find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

Вы хотите -type быть частью expression , но ваша find нуждается в path или -f path своих аргументов командной строки. Прежде чем получить его, он пытается интерпретировать другие аргументы как параметры, поэтому ваш -type на самом деле -t -y -p -e ; Опция -t не определена, поэтому illegal option -- t .

(Сравните этот ответ).

Решение простое: указать path явно. Mac-эквивалент Linux find -type d :

find ./ -type d

Обратите внимание, что это работает и в Linux.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .