Comando find no Linux

Comando find no Linux

jul 13

Inaugurando a nova seção (Comandos), com um breve post sobre como procurar arquivos no Linux.

O find (man find) tem algumas coisas bem úteis. Por exemplo, você pode buscar por arquivos, por diretórios, por links simbólicos, pelo nome do arquivo sem diferenciar maiúsculas e minúsculas – lembrando que sistemas *NIX são case sensitive, etc.

A sintaxe do find é:

find caminho expressao

O caminho é onde você quer procurar, sendo relativo ou absoluto. Agora, com a expressão, podemos fazer as coisas legais. A expressão -type no diz de que tipo é o arquivos, veja:

find ./ -type f
find ./ -type d
find ./ -type l

Os três comandos acima buscariam, a partir do diretório em que você está, por arquivos, diretórios e links simbólicos, respectivamente.

Agora, para casar o tipo do arquivo com o nome, são usadas os parâmetros -name ou -iname (ignore case):

find ./ -name "nome" -type f
find ./ -iname "*nom?.backup" -type d

E aquele asterisco? E a interrogação? É possível utilizar os metacaractéres do shell. Isto, os wildcards, os coringas. Os mesmos que você usaria num ls da vida.

Suponhamos que você tem a seguinte estrutura de diretórios:

./a/d1
./a/d2
./a/d3
./b/d
./c/d1
./c/d2
./c/d3
./c/d4
./d/d
./e/

Os diretórios representados por letras são grupos, e dentro temos as categorias de cada grupo. O que eu preciso saber é quantas categorias (diretórios) de grupo existem, sem contar os diretórios dentro das categorias . E agora? Temos os parâmetros -mindepth e -maxdepth. Eles especificam o nível mínimo e máximo para realizar a busca. Neste caso:

find ./ -mindepth 2 -maxdepth 2 -type d

Explicando melhor:

  • o nível 0 casa com a linha de comando, ou seja, o ./
  • o nível 1 casa os nomes de grupo, como ./a e ./b
  • o nível 2 casa o que eu quero, que são as categorias, como ./a/1 e ./a/2
  • se usasse apenas o -mindepth 2, a busca continuaria dentro dos diretórios, porque eu disse apenas de onde queria começar a busca, e por isso o -maxdepth é necessário

Outras iterações virão em breve. Até ;)

Leave a Reply