Como encontro um arquivo por nome de arquivo no terminal do Mac OSX?

84

Eu quero encontrar um arquivo no meu Macbook com o nome do arquivo: abc.dmg . Eu tentei usar o spotlight, mas não o encontrei. Quando tentei encontrar e usei: find -name abc.dmg -path / , recebi erros novamente.

Qual é a sintaxe adequada para encontrar um arquivo por nome de arquivo com o comando find em um terminal do Mac OSX?

    
por SPRBRN 28.12.2010 / 18:42

6 respostas

117

Em sua forma mais simples, find recebe um parâmetro: o caminho. Na sua forma realmente útil, leva o caminho seguido por critérios de estreitamento.

Assim, você quer:

  • find (o programa)
  • / (o caminho)
  • e -name abc.dmg (os critérios).

find / -name abc.dmg

    
por 28.12.2010 / 18:45
16

find . -name '*.csv' , por exemplo, funcionou para mim com curingas. OP também pode usar find . -name '*.dmg' para verificar seu diretório atual, assumindo que ele estava em / .

    
por 27.10.2016 / 16:11
7

O comando mdfind usa o banco de dados Spotlight

link

    
por 28.12.2010 / 20:21
6

Você pode usar o comando locate .

locate abc.dmg
    
por 28.12.2010 / 18:44
3

A maneira mais simples (que eu tenho certeza que você já tentou, mas hey, deixe-me adicioná-lo ao tópico de qualquer maneira) é digitar abc.dmg na caixa de pesquisa no canto superior direito de qualquer janela do Finder, então selecione "Nome do arquivo" nas opções da Barra de pesquisa exibida.

Não há necessidade do terminal.

Lembre-se também de que apenas diretórios de índices do Spotlight especificados no painel de controle do Spotlight e do abc.dmg podem não estar em um desses diretórios.

Corrija-me se estiver errado, mas acho que o comando "Localizar" precisa saber o que deve ser enviado:

find / -name abc.dmg -print

... deve imprimir qualquer resultado para o terminal (incluindo erros de permissão).

Se você não quiser erros de permissão e quiser pesquisar outros diretórios de usuários, então:

sudo find / -name abc.dmg -print
    
por 28.12.2010 / 23:53
1

Você pode usar as seguintes funções de linha de comando para localizar e abrir rapidamente o arquivo relevante. Acho isso mais fácil do que digitar uma longa string de consulta na janela do Spotlight.

Adicione as seguintes funções em ~/.bash_aliases .

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

Agora, source ~/.bash_aliases ou abra uma nova função de carga do terminal. Para procurar arquivos com palavras, pizza e 2016 em qualquer lugar no nome do arquivo, faça

spot pie*2016 #or
spot 2016*pie

Não há necessidade de prefixar ou anexar * à sua consulta como o padrão de pesquisa, '*$1*' já marca a entrada de curingas no início e no final de sua consulta. cd adicional é para maiúsculas e minúsculas e ignorar marcas diacríticas, por exemplo, fred retornará ambos, Frédéric e FrEDeric.

findpaper restringirá a pesquisa a resultados em um caminho específico (recursivo), enquanto openpaper pie*201 abrirá um resultado de pesquisa (ou primeiro de vários resultados) ou openpaper pie*201 3 abrirá a terceira entrada de resultado. Para evitar a abertura de scripts bash ou outros arquivos que não sejam documentos, você pode restringir o conteúdo do arquivo por atributos de pesquisa adicionais. Consulte Sintaxe de expressão de consulta de metadados de arquivo e link para usar outros operadores de pesquisa.

    
por 09.02.2018 / 05:28