Utilizando o utilitário 'find' - padrão errado?

1

Eu tenho tentado encontrar um objeto compartilhado em particular dentro de ./lib/ usando o utilitário 'find' no bash shell. Para ser mais específico, para encontrar este objeto compartilhado, eu queria encontrar todos os arquivos que começaram com 'lib'. Aqui está uma lista, por exemplo.

libpango-1.0.so.0  
libpango-1.0.so.0.3600.8 
libpangocairo-1.0.so.0
libpangocairo-1.0.so.0.3600.8
libpangoft2-1.0.so.0
libpangoft2-1.0.so.0.3600.8
libpangoxft-1.0.so.0
libpangoxft-1.0.so.0.3600.8    

Eu tentei usar a opção -name com o padrão 'lib. *', mas nenhum dos resultados que eu estava procurando surgiu. Em vez disso, vários arquivos de diretórios diferentes & subdiretórios foram impressos, Para ser mais específico, eu digitei isso no terminal:

find . -name 'lib.*' -print

Onde exatamente eu errei? O que posso fazer para melhorar meu padrão?

Em outra nota, estou usando o bash.

    
por Charybdis 19.06.2015 / 03:02

2 respostas

2

Você tenta usar um regex no seu comando find. Para usar uma regex, você precisa do parâmetro -regex ou pode usar awk e find para localizar todos os arquivos que começaram com lib .

find /usr/lib -type f | awk -F'/' '$NF ~ /^lib/'

Exemplo

$ find /usr/lib -type f | awk -F'/' '$NF ~ /^lib/'
/usr/lib/mate-settings-daemon/libhousekeeping.so
/usr/lib/mate-settings-daemon/libkeyboard.so
/usr/lib/mate-settings-daemon/libxrdb.so
/usr/lib/mate-settings-daemon/libbackground.so
/usr/lib/mate-settings-daemon/libkeybindings.so
/usr/lib/mate-settings-daemon/libmedia-keys.so
/usr/lib/mate-settings-daemon/libclipboard.so
/usr/lib/mate-settings-daemon/libmouse.so
/usr/lib/mate-settings-daemon/libmpris.so
/usr/lib/mate-settings-daemon/libxsettings.so
/usr/lib/mate-settings-daemon/liba11y-settings.so
/usr/lib/mate-settings-daemon/liba11y-keyboard.so
/usr/lib/mate-settings-daemon/libsound.so
/usr/lib/mate-settings-daemon/libxrandr.so
/usr/lib/mate-settings-daemon/libtyping-break.so

Ou sem um regex:

find /usr/lib -type f -name "lib*"

Exemplo

$ find /usr/lib -name "lib*"
/usr/lib/mate-settings-daemon/libhousekeeping.so
/usr/lib/mate-settings-daemon/libkeyboard.so
/usr/lib/mate-settings-daemon/libxrdb.so
/usr/lib/mate-settings-daemon/libbackground.so
/usr/lib/mate-settings-daemon/libkeybindings.so
/usr/lib/mate-settings-daemon/libmedia-keys.so
/usr/lib/mate-settings-daemon/libclipboard.so
/usr/lib/mate-settings-daemon/libmouse.so
/usr/lib/mate-settings-daemon/libmpris.so
/usr/lib/mate-settings-daemon/libxsettings.so
/usr/lib/mate-settings-daemon/liba11y-settings.so
/usr/lib/mate-settings-daemon/liba11y-keyboard.so
/usr/lib/mate-settings-daemon/libsound.so
/usr/lib/mate-settings-daemon/libxrandr.so
/usr/lib/mate-settings-daemon/libtyping-break.so
    
por 19.06.2015 / 14:40
1

Se você está tentando descobrir se uma determinada biblioteca está instalada, você também pode usar o rpm

rpm -qa | grep lib

Os pacotes instalados geralmente estão em / usr / lib ou / usr / lib64 (para versão de 64 bits). Então você também pode fazer

ls /usr/lib | grep lib

Ou o utilitário de localização que você estava usando

find /usr/lib -name "lib*"
    
por 19.06.2015 / 08:55

Tags