Eu sei que isso está marcado como linux, mas vale a pena mencionar: o caminho é necessário para outras variantes * nix que não são linux. No linux, o caminho é opcional se você deseja usar o ponto.
IslandCow
4
O @Seatter "foo *" diz ao find para procurar todos os arquivos que começam com "foo". É apenas o exemplo dele. Você pode usar "gpio *" para encontrar todos os arquivos cujos nomes começam com gpio, ou apenas "gpio1" para encontrar todos os arquivos chamados gpio1.
precisa saber é o seguinte
29
observe que o "foo *" está entre aspas para que o shell não o expanda antes de passá-lo para encontrar. se você apenas o fizesse find . foo*, o foo*seria expandido E depois passou a encontrar.
Grinch
33
Vale ressaltar que " "é muito necessário para pesquisas recursivas.
WesternGun 21/10
3
Também é útil: se você não deseja ser notificado sobre diretórios aos quais não tem permissão (ou outros erros), pode fazêfind . -name "foo*" 2>/dev/null
#
222
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:
findtambém tem as -iname, -regexe -iregexbandeiras para case-insensitive curinga, regex, e correspondência de regex case-insensitive, por isso conduz às grepé desnecessário.
iobender
7
Não acho que seja desnecessário, mas mais conveniente.
Elijah Lynn
1
No entanto, o canal para grep -v pode permitir que você use sequências simples ou expressões regulares para remover as entradas que você não deseja.
door_number_three
3
@iobender - Infelizmente, posso dizer por experiência que nem todos os sistemas vêm com um findcomando que suporta essas opções. Às vezes grepse torna a única opção.
Llama
150
find encontrará todos os arquivos que correspondem a um padrão:
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
O interruptor L é muito útil. Muitas vezes, o usuário não tem idéia sobre os diretórios subjacentes, sejam eles vinculados ou com diretórios normais. Portanto, em caso de dúvida, é sempre bom usar a opção L. Pelo menos, sempre me ajudou.
Primeira vez que vi um gif no SO em quase 9 anos. Bom trabalho!
Joshua Pinter
1
Esses resultados de desempenho parecem muito promissores. Você pode considerar adicionar fd ao home-brew ...
Gr3go 11/01/19
off topic: qual ferramenta você usou para criar o arquivo svg para demonstração?
aprodan
2
@ aprodan A imagem demo foi copiada do GitHub, mas acredito que eles estejam usando asciinema, depois convertida para o formato GIF, mas não tenho certeza.
Kenorb 11/02/19
1
Na verdade, é o formato SVG, então provavelmente asciicast2vectorpode ser usado.
kenorb 12/02/19
27
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)
Sua resposta é a primeira mais correta aqui, pois apenas pesquisa arquivos conforme especificado. Os outros que não especificam o tipo retornarão diretórios.
wilsotc
se você deseja procurar um diretório "-type f" pode ser alterado para "-type d"
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 --helpouman 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ã:
01*** 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
Jefferey Cave
5
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.
por que diabos você usa grep para isso? Apenas stderr redirecionamento para nulafind / -iname '*C*.xml' 2>/dev/null
phuclv
3
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) -typesignifica tipo de item de pesquisa que aqui é o arquivo (f). -namesignifica que você deseja pesquisar arquivos com nomes * .conf .
find . foo*
, ofoo*
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:
fonte
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 àsgrep
é desnecessário.find
comando que suporta essas opções. Às vezesgrep
se torna a única opção.find
encontrará todos os arquivos que correspondem a um padrão:No entanto, se você quiser uma imagem:
Espero que isto ajude!
fonte
brew install tree
para usuários de Mac OSX w / oapt-get
instaladoEm 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
fonte
Se o seu shell suportar uma nova opção de globbing (pode ser ativada por :)
shopt -s globstar
, você pode usar:para encontrar arquivos ou pastas recursivamente. Isso é suportado pelo Bash 4, zsh e shells semelhantes.
Pessoalmente, eu tenho essa função shell definida:
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:
Como alternativa, você pode usar um
fd
utilitário com uma sintaxe simples, por exemplofd pattern
.fonte
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 ofd
utilitário - uma alternativa simples e rápida parafind
escrita em Rust.Sintaxe:
Demo:
Página inicial: https://github.com/sharkdp/fd
fonte
asciinema
, depois convertida para o formato GIF, mas não tenho certeza.asciicast2vector
pode ser usado.Na correspondência curinga, você pode fornecer a sequência que deseja corresponder, por exemplo, * .c (para todos os arquivos c)
fonte
Você pode usar:
Se você deseja usar o REGX, use
-iname
fonte
O comando a seguir listará todos os arquivos com o nome exato "padrão" (por exemplo) nas pastas atuais e subpastas.
find ./ -name "pattern"
fonte
A maneira padrão de procurar arquivos recursivos e disponível na maioria dos casos é
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
ou se as páginas de manual não estiverem disponíveis no seu sistema
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
E, para usá-lo para procurar algum tipo de arquivo específico
Ou, para procurar o nome do arquivo ou o padrão no diretório atual, digite:
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ã:
Esses trabalhos cron precisam ser configurados pelo root, pois updatedb precisa de privilégios de root para percorrer todo o sistema de arquivos.
fonte
para pesquisa de arquivos
find / -xdev -name settings.xml
-> computador inteirofind ./ -xdev -name settings.xml
-> diretório atual e seu subdiretóriopara arquivos com tipo de extensão
fonte
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.
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.
fonte
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
fonte
find / -iname '*C*.xml' 2>/dev/null
Se você deseja pesquisar um arquivo especial com curinga, pode usar o seguinte código:
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 .fonte
Isso pesquisará todos os arquivos relacionados nos diretórios atual e subdiretório, calculando sua contagem de linhas separadamente e totalmente:
fonte
Usar
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
.fonte