Pesquisando Mac através do terminal?


22

existem comandos para pesquisar no seu Mac usando o terminal? Eu tentei usar o grep para pesquisar, mas parece um pouco sem resposta e nada aparece.

Por exemplo, eu digitaria "arquivos grep" (um nome de pasta) e ele apenas imprime uma linha em branco e nada acontece.



Estou interessado em pesquisar em todos os tipos de arquivos; Não necessariamente excluindo arquivos de texto, mas não apenas arquivos de texto.
JFW

Respostas:


21

Você também pode usar o mdfindcomando para realizar uma pesquisa com o Spotlight. Mais informações aqui .

Use mdfind -name searchtermpara recuperar arquivos com o nome searchterm. Use mdfind searchtermpara realizar uma pesquisa no nome e no conteúdo do arquivo.


25

Se você quiser apenas encontrar arquivos com um determinado nome, use find

A página de manual pode ser encontrada AQUI ou digitando man findno prompt do terminal.

Basicamente, o find procurará recursivamente um arquivo que atenda aos critérios especificados. O exemplo mais fácil:

find . -name file_name -print

Isso procurará por um arquivo chamado "nome_do_arquivo" iniciando no diretório atual, pesquisando abaixo e imprimindo os arquivos com esse nome.

find ~ -name ".DS_Store" -delete

Isso encontrará todos os arquivos .DS_Store e os excluirá.

Você pode pesquisar por nome, regex, data. Você pode atuar no arquivo de qualquer maneira Unix com o -execpredicado.

Você também pode usar find como o início de um pipeline de ações mais complexo. Exemplo:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Encontrará todos os arquivos com extensões .m4a ou .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Você fornecerá uma contagem desses arquivos.


Se -printé o único predicado, ele pode ser omitido; Além disso, há globbing simples disponível. Assim, encontrar todos os .txtarquivos sob um diretório fooseria feito comfind foo -name \\*.txt
Norman Grey

@yoshi: Isso é absolutamente falso. A digitação find .É recursiva do cwd. Tente digitar find .no seu diretório raiz!
drewk

My bad poderia jurar que não era recursiva mas talvez servidor tem calçadas -shrug-
Nuala

5

Se você deseja pesquisar em uma pasta inteira, use -r no grep:

grep -r pattern folder/to/search

Com o find, você também pode usar xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

ou para garantir que você pesquise dois arquivos por vez e, portanto, tenha os nomes de arquivos especificados:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern

2

grepespera um padrão e um especs. de arquivo. Se um deles estiver faltando, ele usará o que é passado como padrão e aguarda a pesquisa dos dados via entrada padrão.

Se você quiser usar um arquivo mais complexo, use find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print

Eu basicamente quero que ele encontre arquivos com o nome digitado no comando.
JFW

Nesse caso, você não precisa usar o -execpredicado em find.
Ignacio Vazquez-Abrams
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.