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
?
command-line
files
search
find
srk_cb
fonte
fonte
Respostas:
Localizando arquivos com o
bat
AnywherePara encontrar todos os arquivos em qualquer lugar
/path/to/folder
cujos nomes contenhambat
, você pode usar: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 parafind
. Entãofind
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: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.)Ampliando ou restringindo sua pesquisa, com base no nome
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:Percebi que todos os seus arquivos terminam
.c
. Se você deseja apenas encontrar arquivos assim, use: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 comoembattled.c
, pode usar:-o
é o operador ou .Arquivos Somente Correspondentes
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 executandofind
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:
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á correndofind
com-L
bandeira,-xtype
em um link simbólico testa o tipo do arquivo o link aponta.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
.Obtendo saída detalhada
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
: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
Leitura adicional
Para obter mais informações
find
e outras maneiras de encontrar arquivos, consulte:find
página do manual , acessível on-line ou executandoman find
em um terminal.find
,locate
exargs
utilitários.fonte
-xtype
conselhos; talvezls *bat*
e-maxdepth
/mindepth
também valha a pena mencionar.ls
já foi abordada , concentrei-me no caso recursivofind
aqui. Obviamente, uma resposta detalhada cobrindo uma lista não (ou menos) -recursiva de nomes de arquivos que correspondam a algum padrão (ls
efind
com-maxdepth
) também seria útil. Você pode postar essa resposta!A maneira mais fácil é correr
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
Execute este comando quando você adicionou recentemente novos arquivos à sua conta
fonte
updatetdb
updatedb
foram executados manualmente ou automaticamente),sudo updatedb
seria necessário executar primeiro, sim.bat
.find /
aslocate
pesquisas em um banco de dados, enquantofind
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:
O
.
inicia o comando find a partir do diretório atual.A
-name
corresponde a seqüênciabat
e é sensível a maiúsculas. (-iname
Diferencia maiúsculas de minúsculas)As
-type f
pesquisas para apenas arquivos.fonte
Se os arquivos estiverem no diretório atual, use:
Ou (para tê-los linha por linha):
Se você deseja pesquisar no sistema por esses arquivos, use:
fonte
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:Ou
Como
*
significa "qualquer caractere (s)", a pesquisa está procurando porbat
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 linuxfonte
-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
.por exemplo.:
de
man find
:fonte