2010-12-28 17:42:34 +0000 2010-12-28 17:42:34 +0000
133
133

Como posso encontrar um ficheiro por nome de ficheiro no terminal Mac OSX?

Quero encontrar um ficheiro no meu Macbook com o nome de ficheiro: abc.dmg. Tentei usar o spotlight, mas ele não o encontra. Quando tentei encontrar, e usei: find -name abc.dmg -path /, recuperei os erros.

Qual é a sintaxe adequada para encontrar um ficheiro por nome de ficheiro com o comando find num terminal Mac OSX?

Respostas (7)

182
182
182
2010-12-28 17:45:50 +0000

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

Assim, pretende:

  • find (o programa)
  • / (o caminho), e
  • -name abc.dmg (o critério).
find / -name abc.dmg
26
26
26
2016-10-27 14:11:10 +0000

find . -name '*.csv', por exemplo, trabalhou para mim com wildcards. O OP poderia também utilizar o find . -name '*.dmg' para verificar o seu directório actual, assumindo que estava no /.

10
10
10
2010-12-28 19:21:39 +0000

O comando mdfind utiliza a base de dados Spotlight http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html

6
6
6
2010-12-28 17:44:14 +0000

Pode utilizar o comando locate.

locate abc.dmg
3
3
3
2010-12-28 22:53:12 +0000

A forma mais simples (que tenho a certeza que já tentou, mas deixe-me adicioná-lo ao fio de qualquer forma) é introduzir abc.dmg na caixa de pesquisa na parte superior direita de qualquer janela de pesquisa, depois seleccione “File Name” nas opções da barra de pesquisa que aparece.

Não é necessário o terminal.

Lembre-se também que o Spotlight apenas indexa os directórios especificados no painel de controlo Spotlight e na abc. dmg podem não estar num desses directórios.

Corrige-me se estiver errado, mas acho que o comando find precisa de saber o que deve sair:

find / -name abc.dmg -print

…deve imprimir quaisquer resultados para o terminal (incluindo erros de permissão).

Se não quiser erros de permissão e quiser pesquisar outros directórios de Utilizador então:

sudo find / -name abc.dmg -print
2
2
2
2018-02-09 04:28:07 +0000

Pode utilizar as seguintes funções de linha de comando para encontrar e abrir rapidamente o ficheiro relevante. Acho isto mais fácil do que escrever uma longa sequência de consultas na janela de holofotes.

Adicionar 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, ou source ~/.bash_aliases ou abrir uma nova função de carga de terminal. Para procurar ficheiros com palavras, tarte e 2016 em qualquer parte do nome do ficheiro, faça

spot pie*2016 #or
spot 2016*pie

Não há necessidade de pré-pender ou anexar * à sua consulta como o padrão de pesquisa, '*$1*' já marca a entrada wild card no início e no fim da sua consulta. Os cd adicionais fred são para casos insensíveis e ignoram marcas diacríticas, por exemplo, findpaper irá devolver ambos, Frédéric e FrEDeric.

openpaper pie*201 irá restringir a pesquisa a resultados sob um caminho específico (recursivo) enquanto openpaper pie*201 3 irá abrir um (ou primeiro de vários resultados) resultado de pesquisa ou &007 irá abrir uma terceira entrada de resultado. Para evitar a abertura de scripts de bash ou outros ficheiros não documentados, pode restringir o conteúdo do ficheiro através de atributos de pesquisa adicionais. Veja Sintaxe de Expressão da Consulta de Metadados de Ficheiros e https://ss64.com/osx/mdfind.html para utilizar outros operadores de pesquisa.

0
0
0
2019-06-09 11:50:48 +0000

Capture uma lista de cada ficheiro no seu disco como raiz de /

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt

Cat o ficheiro inteiro através do grep para pesquisar toda a unidade:

cat ~/file-list.txt | grep abc.dmg

Use expressões regulares para mostrar apenas ficheiros .jpg e .dmg:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

Resultado:

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

…etc. Infelizmente também irá captar todos os discos montados de forma a ejectar melhor aqueles que têm muitas ligações. Então, noutra janela eu corro watch tail -n 10 ~/file-list.txt que me mostra onde está no meu covarde hack!