Localizando arquivos com bat
em qualquer lugar
Para localizar todos os arquivos em qualquer lugar dentro de /path/to/folder
cujos nomes contenham bat
, você pode usar:
find /path/to/folder -name '*bat*'
Eu tenho entre o padrão de pesquisa *bat*
porque, se as citações foram omitidas e os arquivos correspondem *bat*
no diretório atual, o shell expandirá *bat*
para uma lista deles e passará esse para find
. Então find
não funcionaria direito. ( \*bat\*
e "*bat*"
também funcionam.)
Para pesquisar na pasta em que você está no momento (por exemplo, para a qual você tem cd
), use .
, como de costume:
find . -name '*bat*'
Para pesquisar em todo o seu computador, use /
. Para pesquisar em seu diretório pessoal, use ~
ou o nome completo do seu diretório pessoal. ( O shell expande ~
para o caminho completo do diretório de origem.)
Ampliando ou restringindo sua pesquisa, com base no nome
Se você quiser pesquisar sem diferenciar maiúsculas e minúsculas, para que arquivos que contenham BAT
, bAt
e assim por diante sejam correspondidos, use o teste -iname
em vez do teste -name
:
find /path/to/folder -iname '*bat*'
Eu notei que todos os seus arquivos terminam em .c
. Se você quiser apenas encontrar arquivos como esse, use:
find /path/to/folder -name '*bat*.c'
Eu notei que todos os seus nomes de arquivos têm bat
no início ou no final da parte que precede o sufixo .c
. Se você quiser evitar arquivos correspondentes como embattled.c
, use:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
é o operador ou .
Correspondendo somente arquivos
Para localizar apenas arquivos comuns - e não pastas, links simbólicos, e nós de dispositivos especiais - você pode usar -type f
. Isso é freqüentemente recomendado e, às vezes, bastante apropriado ... mas geralmente não é o que você realmente quer , especialmente se você estiver executando find
para o propósito de examinar a saída. Se você tivesse um link simbólico que correspondesse à sua pesquisa, você não gostaria de saber sobre isso?
Se você quiser encontrar arquivos regulares e links simbólicos, use:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Isso usa o operador -o
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ê obterá um erro de sintaxe).
Mas suponha que você queira apenas ver links simbólicos que apontam para um arquivo regular (e não links simbólicos para diretórios, nós de dispositivos etc.). Na verdade, é ainda mais simples: use -xtype
em vez de -type
. Desde que você não esteja executando find
com -L
flag, -xtype
em um link simbólico testa o tipo do arquivo para o qual 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
irá combiná-lo mesmo que seu destino direto seja outro link simbólico em vez de um arquivo normal. Isso é quase sempre o que você quer.
Muitas vezes as pessoas acham que querem -type f
, mas na verdade querem -xtype f
.
Obtendo uma saída detalhada
A ação padrão de find
, se você não especificar uma, será -print
. Todos os comandos dados acima são equivalentes a eles mesmos com -print
colados no final.
find
é frequentemente usado para executar comandos com base nos arquivos encontrados - geralmente, comandos que fazem alterações. Mas há também outras ações cuja finalidade é exibir resultados, além de -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 a (embora não exatamente o mesmo que) o que você veria executando ls file
.
Leitura adicional
Para mais informações sobre find
e outras formas de encontrar arquivos, consulte:
-
A página de manual
find
, acessível on-line ou executandoman find
em um terminal. - O manual de referência do GNU findutils , que fornece uma extensa documentação sobre o
find
,locate
, exargs
utilitários. - FindingFiles no wiki de ajuda do Ubuntu , que mostra como usar o find , além de vários outros métodos.