Respostas:
Use find para isso:
find . -name "foo*"
find
precisa de um ponto de partida e o .
(ponto) aponta para o diretório atual.
find . foo*
, o foo*
seria expandido E depois passou a encontrar.
" "
é muito necessário para pesquisas recursivas.
find . -name "foo*" 2>/dev/null
A localização da tubulação no grep é geralmente mais conveniente; fornece a você todo o poder de expressões regulares para correspondência arbitrária de caracteres curinga.
Por exemplo, para encontrar todos os arquivos com a string "foo" que não diferencia maiúsculas de minúsculas no nome do arquivo:
~$ find . -print | grep -i foo
find
também tem as -iname
, -regex
e -iregex
bandeiras para case-insensitive curinga, regex, e correspondência de regex case-insensitive, por isso conduz às grep
é desnecessário.
find
comando que suporta essas opções. Às vezes grep
se torna a única opção.
find
encontrará todos os arquivos que correspondem a um padrão:
find . -name "*foo"
No entanto, se você quiser uma imagem:
tree -P "*foo"
Espero que isto ajude!
brew install tree
para usuários de Mac OSX w / o apt-get
instalado
find -L . -name "foo*"
Em alguns casos, eu precisava do parâmetro -L para manipular links de diretório simbólicos. Por padrão, os links simbólicos são ignorados. Nesses casos, era bastante confuso, pois eu mudaria o diretório para um subdiretório e veria o arquivo que correspondia ao padrão, mas a localização não retornaria o nome do arquivo. Usar -L resolve esse problema. As opções de links simbólicos para localizar são -P -L -H
Se o seu shell suportar uma nova opção de globbing (pode ser ativada por :)shopt -s globstar
, você pode usar:
echo **/*foo*
para encontrar arquivos ou pastas recursivamente. Isso é suportado pelo Bash 4, zsh e shells semelhantes.
Pessoalmente, eu tenho essa função shell definida:
f() { find . -name "*$1*"; }
Nota: A linha acima pode ser colada diretamente no shell ou adicionada ao ~/.bashrc
arquivo do usuário .
Então eu posso procurar por arquivos digitando:
f some_name
Como alternativa, você pode usar um fd
utilitário com uma sintaxe simples, por exemplo fd pattern
.
shopt -s globstar
comando. Isso é suportado no Bash, zsh e shells semelhantes.
bash-3.2$ shopt -s globstar
dábash: shopt: globstar: invalid shell option name
fd
No caso, find
é muito lento, tente o fd
utilitário - uma alternativa simples e rápida para find
escrita em Rust.
Sintaxe:
fd PATTERN
Demo:
Página inicial: https://github.com/sharkdp/fd
asciinema
, depois convertida para o formato GIF, mas não tenho certeza.
asciicast2vector
pode ser usado.
find <directory_path> -type f -name "<wildcard-match>"
Na correspondência curinga, você pode fornecer a sequência que deseja corresponder, por exemplo, * .c (para todos os arquivos c)
Você pode usar:
# find . -type f -name 'text_for_search'
Se você deseja usar o REGX, use -iname
# find . -type f -iname 'text_for_search'
A maneira padrão de procurar arquivos recursivos e disponível na maioria dos casos é
find . -name "filepattern"
Ele inicia o deslocamento recursivo para nome de arquivo ou padrão no diretório atual em que você está posicionado. Com o comando find, você pode usar curingas e várias opções para ver a lista completa de opções, digite
man find
ou se as páginas de manual não estiverem disponíveis no seu sistema
find --help
No entanto, existem ferramentas mais modernas e mais rápidas do que as que estão percorrendo todo o sistema de arquivos e indexando seus arquivos. Uma dessas ferramentas comuns é localizar ou slocate / mlocate, você deve verificar o manual do seu sistema operacional sobre como instalá-lo e, uma vez que instalado, ele precisa iniciar o banco de dados; se o script de instalação não fizer isso por você, isso poderá ser feito manualmente, digitando-se
sudo updatedb
E, para usá-lo para procurar algum tipo de arquivo específico
locate filename
Ou, para procurar o nome do arquivo ou o padrão no diretório atual, digite:
pwd | xargs -n 1 -I {} locate "filepattern"
Ele examinará seu banco de dados de arquivos e imprimirá rapidamente os nomes dos caminhos que correspondem ao padrão digitado. Para ver a lista completa das opções de localização, digite:
locate --help
ouman locate
Além disso, você pode configurar o localizador para atualizar seu banco de dados em horários agendados por meio de uma tarefa cron, portanto, faça uma amostra do cron que atualiza o banco de dados à 1 da manhã:
0 1 * * * updatedb
Esses trabalhos cron precisam ser configurados pelo root, pois updatedb precisa de privilégios de root para percorrer todo o sistema de arquivos.
Fico surpreso ao ver que localizar não é muito usado quando devemos recursivamente.
Primeiro, localizava "$ PWD" para obter a lista de arquivos na pasta atual de interesse e, em seguida, executava greps como quisesse.
locate "$PWD" | grep -P <pattern>
Obviamente, isso pressupõe que o updatedb seja feito e o índice seja atualizado periodicamente. Essa é uma maneira muito mais rápida de encontrar arquivos do que executar uma busca e pedir que ela desça na árvore. Mencionando isso para ser completo. Nada contra o uso de find, se a árvore não for muito pesada.
locate "$PWD*.mp4"
Apenas para lembrar que você pode pular agrep
O comando abaixo ajuda a procurar arquivos
1) Independentemente do caso
2) Resultado Excluindo pastas sem permissão
3) Pesquisando a partir da raiz ou do caminho que você deseja. Mude / com o caminho que você preferir.
Sintaxe:
find -iname '' 2> & 1 | grep -v "Permissão negada"
Exemplo
localize / -nome 'C * .xml' 2> & 1 | grep -v "Permissão negada"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
Se você deseja pesquisar um arquivo especial com curinga, pode usar o seguinte código:
find . -type f -name "*.conf"
Suponha que você queira pesquisar todos os arquivos .conf daqui:
.
significa pesquisa iniciada a partir daqui (local atual)
-type
significa tipo de item de pesquisa que aqui é o arquivo (f).
-name
significa que você deseja pesquisar arquivos com nomes * .conf .
Usar
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Explicação
find
faz recursão.-o
significa -or
. Portanto, acima significa procurar esse curinga OU esse. Se você tiver apenas um padrão, não será necessário -o
.