Какая альтернатива для `find -type d` на Mac?
В линуксе find -type d
работает, чтобы перечислить все подкаталоги, игнорируя файлы.
Однако, когда я запускаю это на Mac (High Sierra), я получаю ошибку: find: illegal option -- t
,
Изучая Google, я не нашел какой-либо очевидной альтернативы для эквивалента командной строки, за исключением ответов, предлагающих использовать ls
и проанализировать вывод через grep
или есть решения для приложений с графическим интерфейсом или для пользователей, не использующих командную строку (с помощью поиска и т. д.).
Сценарий использования должен был бы передать этот вывод нечеткому искателю, который ожидает разделенный строкой список элементов. Например, я могу сделать это с помощью файлов и ripgrep
с: rg --files -g "" | fzy
, Ripgrep, похоже, не поддерживает --folders
или что-то подобное из моего беглого просмотра на трекере GitHub.
В линуксе find -type d | fzy
"просто работает". Вплоть до установки других пакетов, но я очень надеялся на что-то, что просто предустановлено.
Я могу уйти от этого с помощью некоторых сценариев, но я бы хотел услышать о лучшей практике здесь.
1 ответ
Я думаю твой 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.