Qual é a alternativa para 'find -type d' on Mac?

0

No Linux find -type d funciona para listar todos os subdiretórios, ignorando os arquivos.

No entanto, quando executo isso em um Mac (High Sierra), recebo o erro: find: illegal option -- t .

Ao investigar os googles, não encontrei nenhuma alternativa óbvia para um equivalente na linha de comando, exceto para respostas sugerindo que eu use ls e analise a saída via grep , ou tenha soluções para aplicativos GUI ou para o usuários de linha de comando não (via localizador, etc.).

O usecase seria canalizar essa saída para um localizador difuso que espera uma lista de itens separada por nova linha. Por exemplo, posso fazer isso com arquivos e ripgrep com: rg --files -g "" | fzy . O Ripgrep parece não suportar uma opção --folders ou algo semelhante na minha navegação superficial no rastreador de problemas do github.

No Linux find -type d | fzy "apenas funciona". Até instalar outros pacotes, mas eu realmente esperava por algo que vem pré-instalado.

Eu posso me livrar disso com alguns scripts, mas adoraria ouvir sobre as melhores práticas aqui.

    
por Senjai 13.05.2018 / 23:23

1 resposta

4

Eu acho que o seu find faz entender -type d porque isso é exigido pelo POSIX . No entanto, a sintaxe que você usou:

find -type d

não é compatível com POSIX, portanto não é portável. A sintaxe portátil adequada é:

find path -type d

As versões do Linux de find assumirão ./ se você omitir path . No Mac find espera algo como este :

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

Você deseja que -type faça parte de expression , mas seu find precisa de path ou -f path em seus argumentos de linha de comando. Antes de obter um, ele tenta interpretar outros argumentos como opções, portanto, seu -type é, de fato, -t -y -p -e ; não há nenhuma opção -t definida, portanto illegal option -- t .

(Compare esta resposta ).

A solução é simples: especifique path explicitamente. Equivalente em Mac do Linux find -type d é:

find ./ -type d

Observe que isso também funciona no Linux.

    
por 13.05.2018 / 23:34