Como usar a busca silenciosa?

0

Eu quero procurar todas as ocorrências de <searchterm> na minha máquina. Agora, quando eu fizer uma pesquisa como essa

find / <searchterm>

Eu posso ver todos os caminhos pelos quais a pesquisa está sendo executada. Como posso limitar os resultados ao meu searchterm?

Exemplo abstrato

Eu tenho uma pasta, vamos chamá-lo de my-own-folder . Agora, quando eu quiser saber se há outras pastas com o mesmo nome e executar uma pesquisa por

find / my-own-folder

a saída mostra algumas centenas de linhas como esta

/var/www/my-own-folder/index.php
/var/www/my-own-folder/lib/1.php
/var/www/my-own-folder/templates/2.php
/var/www/my-own-folder/log/3.log

seguido por outros milhares de linhas (~ 380k linhas) que contêm /usr , /lib , /proc , /var e assim por diante, exemplos:

/etc/gshadow
/etc/fonts
/dev/ram7
/media/user
/run/udev/watch
/bin/gzexe
/vmlinuz
/lost+found

E as linhas não contêm my-own-folder . Eu duvido que eles estejam todos conectados a essa pasta. Então, por que eles são produzidos?

Exemplo preciso

Eu quero aplicar um patch para o openldap mas não sei onde eu pode encontrar a pasta para executar o patch. Então, quando eu procuro

find / openldap
find / slapd

parece produzir todos os locais onde a pesquisa é realizada e não apenas as ocorrências de openldap ou slapd .

Atualizar

A minha culpa não foi usar -name na minha pesquisa como esta

find / -name "<searchterm>"
    
por Gottlieb Notschnabel 17.06.2015 / 08:38

4 respostas

0

Para limitar a quantidade de saída, você pode usar head ou tail para ler o primeiro ou o último x número de termos. Por exemplo,

$ find . -iname "*test*" | head -n 10
find: './.cache/dconf'./xterm-297/tektests
./xterm-297/tektests/imtesth.tek
./xterm-297/tektests/fotest.tek
./xterm-297/tektests/aitest.tek
./xterm-297/tektests/imtest.tek
./xterm-297/testxmc.c
./xterm-297/Tests
./xterm-297/vttests
./test.c
: Permission denied./file2.test

Você também pode usar less para visualizar a saída convenientemente com os botões page-up / down.

find / -type d -name "foldername" | less

Você também pode usar ! -path para dizer ao find para ignorar alguma pasta específica

find . ! -path /somedirectory/anotherdirectory -iname "searchterm"

de uso grep -v termyoudontwant . -v flag permite ignorar coisas que você não quer ver na saída

find . -name "searchterm" | grep -v idontwantthatstuff '

Find permite especificar que tipo você deseja pesquisar. Se você quiser procurar por pastas, digite é d. Para procurar por todas as pastas no sistema denominadas test , execute isto:

find / -type d -name "test"

Aqui está um exemplo concreto para pesquisar o diretório exato no meu sistema:

$ sudo find / -type d -name "bin"                                              
/home/xieerqi/bin
/usr/lib/initramfs-tools/bin
/usr/lib/klibc/bin
/usr/lib/pm-utils/bin
/usr/lib/2013.com.canonical.certification:checkbox/bin
/usr/lib/i386-linux-gnu/qt4/bin
/usr/lib/ure/bin
/usr/lib/2013.com.canonical.certification:plainbox-resources/bin
/usr/lib/python3/dist-packages/plainbox/impl/providers/stubbox/bin
/usr/lib/guile-2.0/bin
/usr/share/qt4/bin
/usr/share/libreoffice/bin
/usr/src/linux-headers-3.16.0-30/tools/testing/selftests/rcutorture/bin
/usr/local/bin
/usr/bin
/bin

Se eu quiser ignorar as entradas /usr/ , eu corro isto:

$ sudo find /   -type d -name "bin" | grep -v '\/usr\/*'                       
/home/xieerqi/bin
/bin

Para ignorar os diretórios / usr, / lib, / proc, / var, mude o grep assim

grep -v '\/usr\/*\|\/lib\/*\|\/proc\/*\|\/var\/*'

    
por Sergiy Kolodyazhnyy 17.06.2015 / 08:48
2

Você pode usar o redirecionamento :

find / <searchterm> 2>/dev/null

Isso redireciona todos os erros para o dispositivo nulo / dev / null .

por exemplo:

 # find / -name StewieGriffin\*
/root: Permission denied
/home/peterg: Permission denied
/home/stewie/StewieGriffin-resume.doc

Seria convertido para

# find / -name StewieGriffin\* 2>/dev/null
/home/stewie/StewieGriffin-resume.doc

Por favor, dê uma olhada no link .

    
por Maythux 17.06.2015 / 08:40
1

Como você descobriu, -name é o sinalizador a ser usado, pois é incorporado a encontrar . Como uma solução de propósito mais geral que cobrirá você quando outros aplicativos não tiverem uma ferramenta para racionalizar os resultados da pesquisa (apt-get, por exemplo), você poderá usar o grep.

find / <searchterm> | grep <searchterm>
    
por elmato 17.06.2015 / 12:59
0

Não use um espaço em branco entre / e my-own-folder . Definir caminho completo para a pasta assim:

# find /var/www/my-own-folder

Isso só produzirá o conteúdo de my-own-folder .

    
por krt 17.06.2015 / 08:55