Pesquise todos os arquivos com extensão .sql em pastas e subpastas

17

Desejo procurar todos os arquivos com a extensão .sql em pastas e subpastas (recursivas).

Como posso fazer isso?

Blankman
fonte

Respostas:

29

Ou...

find $directory_name -name \*.sql

Por exemplo

find / -name \*.sql

Ou

find ~ \*.sql

(onde ~ equivale a / home / your_username /) ou ...

find /usr/local/share/ \*.sql

e assim por diante.


fonte
2

Execute isso na linha de comando:

cd / && find | grep '\.sql$'

Mude '/' para o diretório que você deseja pesquisar.

O findcomando é capaz de realizar a tarefa sem grep (usando opções extras), mas acho o uso acima mais conveniente.

Em ordem, o comando acima:

  1. Altera o diretório atual para o diretório raiz ( cd /)
  2. Lista todos os arquivos e diretórios no e abaixo do diretório atual ( find)
  3. Filtra os arquivos e diretórios para qualquer coisa que termine com '.sql' ( | grep '\.sql$')
Barbarrosa
fonte
obrigado, você pode explicar isso? você está usando grep e passando sua saída para encontrar?
Blankman
Vice-versa, na verdade. Estou usando find e passando sua saída para grep. Eu adicionei uma explicação mais detalhada acima.
Barbarrosa
isso funcionaria em um Mac também? Eu tentei 'encontrar | grep '\ .sql $' e gerou as informações de ajuda do uso.
Blankman
O find é uma ferramenta poderosa e você realmente não precisa canalizar a saída para grep. Este é um link legal - content.hccfl.edu/pollock/unix/findcmd.htm
Panther
1
findjá possui recursos de filtro
enzotib
1

Sei que este é um post antigo, mas sou muito novo nisso e encontrei uma maneira fácil de encontrar todos os arquivos de uma certa extensão em um diretório e seus subdiretórios filhos. Bem, você primeiro navega para o parent Directoryentão find . -name '*.sql'e encontrará todos os arquivos com extensão .sql nos diretórios e seus subdiretórios.

No meu caso, eu queria excluir todos os arquivos .xml no diretório e seus subdiretórios, então o que fiz mais foi adicionar o remove como aquifind . -name '*.xml' | xargs rm

Espero que isso ajude alguém :)

M090009
fonte
2
findentende o -deletecomando. Não há necessidade de envolver rm. Ou você pode usar o -execcomando para invocá-lo diretamente sem o desvio através de um cano e xargs.
David Foerster
0
locate -br \\.sql$ | egrep '^/folder/path/'

Se não estiver instalado, instale-o anteriormente com:

sudo apt install mlocate
Vzzarr
fonte
Isso requer uma mlocate.dbinstância atualizada que não esteja configurada pronta para uso no Ubuntu (eu blieve). Além disso, por que não simplesmente locate '/folder/path/*.sql'?
David Foerster
@DavidFoersterI Tentei conforme especificou mas não trabalho, eu acho regex em locatetem alguma configuração diferente de regex usado emegrep
Vzzarr
locatecorresponde a expressões globais como /folder/path/*.sql, e não expressões regulares.
David Foerster
desculpe, mas pelo man locateque entendi -r, --regexp REGEXP - Search for a basic regexp REGEXP, assumi que era uma regex. De qualquer forma eu tentei a sua "expressão global", mas não funciona, me desculpe
Vzzarr
Leia pelo menos as primeiras frases da descrição antes de começar a escolher a partir da sinopse da opção: “Se --regexnão for especificado, PATTERNs podem conter caracteres brilhantes.” ( Fonte )
David Foerster