Navegue pelo diretório atual e encontre os arquivos que começam com “lib” e exclua os subdiretórios

0

Eu quero pesquisar arquivos no diretório atual, começando com "lib". Eu quero eliminar sub-diretórios.

Estou tentando seguir o comando, mas não está dando nenhum arquivo. Alguma coisa errada no seguinte comando?

find -maxdepth 1 -name "lib*.*" -type "f"
    
por techfun 23.01.2014 / 19:26

2 respostas

2

Como mencionado em um comentário, no Unix, *.* significa que o nome do arquivo deve conter um ponto. Se os nomes dos seus arquivos não contiverem períodos, use -name "lib*" ; por exemplo,

find . -maxdepth 1 -type f -name "lib*" -printf '%f\n'
    
por 24.01.2014 / 01:23
1

Seu exemplo funciona para mim, desde que eu esteja no diretório:

$ cd /lib
$ find -maxdepth 1 -name "lib*.*" -type "f"
./libthread_db-1.0.so
./libfreebl3.so
./libnsl-2.12.so
./libnss_compat-2.12.so
./libcidn-2.12.so
./libdl-2.12.so
./libnss_hesiod-2.12.so
./libresolv-2.12.so
./libz.so.1.2.3
./libm-2.12.so
./libanl-2.12.so
./libpthread-2.12.so
./libutil-2.12.so
./libnss_dns-2.12.so
./libnss_files-2.12.so
./libcrypt-2.12.so
./libBrokenLocale-2.12.so
./libfreebl3.chk
./libnss_nisplus-2.12.so
./libSegFault.so
./libc-2.12.so
./librt-2.12.so
./libnss_nis-2.12.so

Eu estou supondo que você emitiu seu comando de outro diretório. Em qualquer caso, é mais comum especificar o diretório que você deseja usar como ponto de partida, por exemplo:

find /lib -maxdepth 1 -name "lib*.*" -type "f"

Além disso, como outros observaram nos comentários, *.* significa que o nome do arquivo deve conter um '.' (como acontece se pesquisar em um diretório contendo bibliotecas, então, provavelmente, eles conterão um ponto).

    
por 24.01.2014 / 01:33