Comando find no Linux
Comando find no Linux
jul 13Inaugurando 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 expressaoO 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é