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:
bat
AnywherePara encontrar todos os arquivos em qualquer lugar /path/to/folder
cujos 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 find
não funcionaria direito. ( \*bat\*
e "*bat*"
também funciona.)
Para pesquisar na pasta em que você está atualmente (por exemplo, para quem cd
editou), 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
, bAt
e assim por diante são correspondidos, usar o -iname
teste em vez do -name
teste:
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 bat
no início ou no final da parte que precede o .c
sufixo. 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 find
com 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 -o
operador 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 -xtype
vez de -type
. Desde que você não está correndo find
com -L
bandeira, -xtype
em 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 f
ele 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
.
find
A 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 -print
tacheados 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 find
e outras maneiras de encontrar arquivos, consulte:
find
página do manual , acessível on-line ou executando man find
em um terminal.find
, locate
e xargs
utilitários.-xtype
conselhos; talvez ls *bat*
e -maxdepth
/ mindepth
também valha a pena mencionar.
ls
já foi abordada , concentrei-me no caso recursivo find
aqui. Obviamente, uma resposta detalhada cobrindo uma lista não (ou menos) -recursiva de nomes de arquivos que correspondam a algum padrão ( ls
e find
com -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
updatedb
foram executados manualmente ou automaticamente), sudo updatedb
seria necessário executar primeiro, sim.
bat
.
find /
as locate
pesquisas em um banco de dados, enquanto find
recursivamente 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 -name
corresponde a seqüência bat
e é sensível a maiúsculas. ( -iname
Diferencia maiúsculas de minúsculas)
As -type f
pesquisas 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 find
comando, com a -iname
opção de correspondência de nome de arquivo que não diferencia maiúsculas de minúsculas ou a -name
opçã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 bat
qualquer 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.