localizar alias com find

2

Em sistemas pequenos onde não há locate instalado, como um alias teria o mesmo resultado que o locate?

Eu posso imaginar que find pode produzir a mesma saída, portanto, um alias pode se parecer com

alias locate="find / -name"

Mas isso não parece funcionar da mesma forma que o locate:

locate test

só encontrará arquivos com o nome exatamente chamado test , enquanto o locate encontrará todos os arquivos que contenham isso.

Solução alternativa

use:

locate *test*
    
por rubo77 25.06.2015 / 09:54

4 respostas

4

Para melhorar o enorme impacto de velocidade na localização, você pode simular algo como localizar

alias locate="if [ ! -e /tmp/locate.db -a ! -e /tmp/locate.lockdb ]
then touch /tmp/locate.lockdb
trap \"rm /tmp/locate.lockdb; rm /tmp/locate.db; exit\" SIGHUP SIGINT SIGTERM
find /|tee /tmp/locate.db
chmod 666 /tmp/locate.db
rm /tmp/locate.lockdb
elif [ -e /tmp/locate.lockdb ]
then find /
else cat /tmp/locate.db
fi|grep "

Claro que existe um problema com permissões! Seria melhor escrever alguns comandos setuid para tee e cat para gravar o banco de dados no modo superusuário e em um local melhor, mas /tmp .

Uma alternativa barata na maioria dos sistemas de um ou poucos usuários seria escrever por usuário locate.db em algum lugar perto de $HOME .

Outro apelido legal é capaz de atualizar / encontrar. Hmm finalmente acho que esse alias funciona melhor que o original;)

alias relocate="if [ ! -e /tmp/locate.lockdb ]
then rm /tmp/locate.db
fi
locate "

Editar Eu realmente acho que realocar deve ser usado apenas como o alias de localização acima. Se você usar o relocate sem um argumento, receberá um erro. A idéia é usar relocate "no file to search for" se você não quiser pesquisar, mas apenas atualizar o banco de dados.

Ok, o achado também deve ser definido. Mas então você pode jogar fora seu pacote de localização. O argumento grep deve ser passado por sed para citar os . dots.

OBSERVAÇÃO PARA NOOBS : Quando estou falando de setuid aqui NÃO DEFINIR O SETUID FLAG EM FERRAMENTAS COMO tee , cat ou find . Isso seria uma violação de segurança do seu sistema! O que quero dizer é escrever alternativas seguras para esses comandos simples que funcionam no modo setuid e que funcionam de forma restrita, apenas para o propósito de fornecer ferramentas adequadas para esse apelido.

    
por 25.06.2015 / 10:46
3
function locate_f()
{
        find / -path "*$1*" //Edit:path (as Gilles stated)
}
alias locate=locate_f
    
por 25.06.2015 / 10:22
2

Tente

alias locate="find / | grep "

Isso deve funcionar exatamente como localizar - mas é claro que será muito mais lento

    
por 25.06.2015 / 10:08
1

1) Adicione o Alias globalmente para todos os usuários

echo 'alias locate="grep $1 /var/locate/locate.db"' >> /etc/bashrc

você poderia essencialmente apontá-lo para um script de shell que você pode fazer seleções de argumentos mais intuitivas ... Isso deve ser adequado se você está apenas procurando uma pesquisa muito simples.

2) Adicione o Cron Job para ser executado diariamente.

/etc/cron.daily
#!bin/bash
if [[ ! -d /var/locate ]]; then
     mkdir /var/locate
fi
locatedb=/var/locate/locate.db
rm -f $locatedb
for DIRS in 'ls /|grep -v "proc"'
do
   find /$DIRS -type f >> $locatedb 2>&1 /dev/null
done

Você terá os mesmos resultados que o mlocate sem instalar o mlocate ... Acabei de testar no CentOS .... e os resultados são QUASE exatamente idênticos.

    
por 09.07.2015 / 07:35