Digamos que haja arquivos com nomes:
batman.c
debate.c
cricketbat.c
Que comando e como devo usá-lo para listar todos esses arquivos usando a tag de pesquisa bat?
Digamos que haja arquivos com nomes:
batman.c
debate.c
cricketbat.c
Que comando e como devo usá-lo para listar todos esses arquivos usando a tag de pesquisa bat?
Respostas:
batAnywherePara encontrar todos os arquivos em qualquer lugar /path/to/foldercujos nomes contenham bat, você pode usar:
find /path/to/folder -name '*bat*'
Tenho citado o padrão de pesquisa *bat*, porque, se as cotações foram omitidos e arquivos corresponder *bat*no diretório atual, o shell irá expandir *bat*em uma lista deles e passar isso para find. Então findnão funcionaria direito. ( \*bat\*e "*bat*"também funciona.)
Para pesquisar na pasta em que você está atualmente (por exemplo, para quem cdeditou), use .como de costume:
find . -name '*bat*'
Para pesquisar em todo o computador, use/ . Para pesquisar no diretório inicial, use ~ou o nome completo do diretório inicial. ( O shell se expande~ para o caminho totalmente qualificado do diretório inicial.)
Se você deseja pesquisar caso insensível, então arquivos contendo BAT, bAte assim por diante são correspondidos, usar o -inameteste em vez do -nameteste:
find /path/to/folder -iname '*bat*'
Percebi que todos os seus arquivos terminam .c. Se você deseja apenas encontrar arquivos assim, use:
find /path/to/folder -name '*bat*.c'
Notei que todos os seus nomes de arquivos têm batno início ou no final da parte que precede o .csufixo. Se você deseja evitar a correspondência de arquivos como embattled.c, pode usar:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oé o operador ou .
Para encontrar apenas arquivos regulares - e não pastas, links simbólicos e nós de dispositivos especiais - você pode usar -type f. Isso é frequentemente recomendado e, às vezes, bastante apropriado ... mas geralmente não é o que você realmente deseja , especialmente se você estiver executando findcom o objetivo de examinar a saída você mesmo. Se você tivesse um link simbólico que correspondesse à sua pesquisa, não gostaria de saber?
Se você deseja encontrar arquivos regulares e links simbólicos, pode usar:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Isso usa o -ooperador e também parênteses para o agrupamento (que deve ser citado para que o shell não os trate especialmente; caso contrário, você receberá um erro de sintaxe).
Mas suponha que você queira ver apenas links simbólicos que, em última análise, apontam para um arquivo regular (e não links simbólicos para diretórios, nós de dispositivos etc.). Na verdade, isso é ainda mais simples: use em -xtypevez de -type. Desde que você não está correndo findcom -Lbandeira, -xtypeem um link simbólico testa o tipo do arquivo o link aponta.
find /path/to/folder -name '*bat*' -xtype f
Se você tiver um link simbólico para outro link simbólico para um arquivo, -xtype fele corresponderá, mesmo que seu destino direto seja outro link simbólico, e não um arquivo comum. Isso é quase sempre o que você deseja.
Muitas vezes, as pessoas pensam que querem -type f, mas realmente querem -xtype f.
findA ação padrão de se você não especificar uma é -print. Todos os comandos dados acima são equivalentes a si mesmos, com os -printtacheados no final.
findé frequentemente usado para executar comandos com base nos arquivos encontrados - geralmente, comandos que fazem alterações. Mas também existem outras ações cujo objetivo é exibir resultados -print. De particular interesse é -ls:
find /path/to/folder -name '*bat*' -ls
Isso fornece informações detalhadas sobre cada arquivo, em um formato de várias colunas, semelhante (embora não seja o mesmo) ao que você veria executando .ls file
Para obter mais informações finde outras maneiras de encontrar arquivos, consulte:
findpágina do manual , acessível on-line ou executando man findem um terminal.find, locatee xargsutilitários.-xtypeconselhos; talvez ls *bat*e -maxdepth/ mindepthtambém valha a pena mencionar.
ls já foi abordada , concentrei-me no caso recursivo findaqui. Obviamente, uma resposta detalhada cobrindo uma lista não (ou menos) -recursiva de nomes de arquivos que correspondam a algum padrão ( lse findcom -maxdepth) também seria útil. Você pode postar essa resposta!
A maneira mais fácil é correr
locate bat
Dessa forma, você pode procurar em todo o computador arquivos que contenham "bat" no nome do arquivo
Para atualizar a lista de arquivos no seu PC, execute
updatedb
Execute este comando quando você adicionou recentemente novos arquivos à sua conta
updatetdb
updatedbforam executados manualmente ou automaticamente), sudo updatedbseria necessário executar primeiro, sim.
bat.
find /as locatepesquisas em um banco de dados, enquanto findrecursivamente lista /e corresponde ao regex.
Abra o terminal e altere os diretórios para o diretório de onde você deseja iniciar a pesquisa e, em seguida, execute este comando:
find . -name "*bat*" -type f
O .inicia o comando find a partir do diretório atual.
A -namecorresponde a seqüência bate é sensível a maiúsculas. ( -inameDiferencia maiúsculas de minúsculas)
As -type fpesquisas para apenas arquivos.
Se os arquivos estiverem no diretório atual, use:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Ou (para tê-los linha por linha):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Se você deseja pesquisar no sistema por esses arquivos, use:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Você deseja usar o findcomando, com a -inameopção de correspondência de nome de arquivo que não diferencia maiúsculas de minúsculas ou a -nameopção de nome de arquivo que diferencia maiúsculas de minúsculas. Ambos permitem que você use nomes curinga. Portanto, para encontrar qualquer nome de arquivo que contenha "bat", você usaria:
find / -iname '*bat*'
Ou
find / -name '*bat*'
Como *significa "qualquer caractere (s)", a pesquisa está procurando por batqualquer caractere, incluindo nenhum, antes ou depois dele. As /pesquisas no diretório raiz recursivamente, você pode usar o .que pesquisará recursivamente no diretório atual ou o caminho absoluto para onde você deseja pesquisar. Veja como procurar arquivos usando regex no script shell linux
-type f, o que faz mais do que simplesmente excluir diretórios e geralmente não é o que os usuários realmente desejam .
Use o bom e velho find.
find <path_for_search> -type f -iname "*bat*"
por exemplo.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
de man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.