Linha de Comando em Linux: Find – Parte 05, Expressões

Veja as outras partes desse Post:

  1. Linha de Comando em Linux: Find – Parte 01
  2. Linha de Comando em Linux: Find – Parte 02, Opções Verdadeiras -H -L -P
  3. Linha de Comando em Linux: Find – Parte 03, Depuração(Debug) de Erros
  4. Linha de Comando em Linux: Find – Parte 04, Otimizando as Buscas com a Opção -O
  5. Linha de Comando em Linux: Find – Parte 05, Expressões
  6. Linha de Comando em Linux: Find – Parte 06, Operadores
  7. Linha de Comando em Linux: Find – Parte 07, Exemplos de Uso

Nos artigos anteriores, vimos a estrutura do comando find

find [-H] [-L] [-P] [-D debug_opções] [-O nível] [Caminho…] [expressão]

hoje iremos ver a última parte dessa estrutura: Expressão

Ao contrário dos artigos 02, 03 e 04, essa parte aqui, a 05, é muito importante e comumente usada.

Não iremos realizar testes práticos aqui. Focarei apenas no significados dos itens.

Expressões no Comando Find

 

As expressões são formadas por opções, testes e ações

Opções, testes e ações são separados por operadores: -and, -not, !, (), -o, -or e ,

 

Opções

  • -daystart = Mede tempo começando do começo do dia de hoje. Sem essa opção find iria pesquisar 24 horas atrás começando a contar do momento em que você executa o comando. Obs.: Essa opção não recebe valores.
  • -depth = Processa todo o conteúdo do diretório antes do diretório em si. Obs.: Essa opção não recebe valores.
  • -maxdepth = Pesquise até certa quantidade de subpastas dentro da pasta. Por exemplo, se tenho as pastas  “/elder/documentos/contas/” e, de dentro da pasta “/elder”, digito o comando “find /elder/documentos/contas/  -maxdepth 1” find irá procurar arquivos até dentro apenas da pasta “/elder/”. Se o valor de -maxdepth for 2, então irá procurar arquivos dentro de /elder e  dentro da sua subpasta /elder/documentos, mas não dentro de “contas”
  • -mindepth = Pesquisa subpastas de acordo com o valor que passarmos; por exemplo, estamos dentro da pasta “/elder” e dentro temos o a as pastas “/elder/documentos/contas/”. Executarmos “find /elder/documentos/contas/  -mindepth 3” find irá pesquisar apenas dentro da pasta contas, se executarmos “find /elder/documentos/contas/  -mindepth 2”  find irá pesquisar dentro da pasta documentos e da sua subpasta contas, mas não dentro de “/elder”
  • -mount = Não desce para pastas dentro de outros sistemas de arquivos. É uma alternativa para -xdev. -mount é usado no lugar de -xdev por que é compatível com outras versões de find.
  • -noleaf = Essa opção é necessária quando usamos find dentro de Sistemas de Arquivos que não seguem o padrão unix, como CD-ROM, sistemas de arquivos do MS-DOS. Sabemos que dentro de diretórios que seguem o padrão Unix  existem alguns hard links especiais, como o ponto(.) e um  hard link que é o próprio nome do diretório.

 

Testes

Os testes podem receber valores(argumentos) numéricos da seguinte forma:

Sinal de adição(+):  para representar valor maior que. Por exemplo, +5 pode ser usado para encontrar arquivos maiores que 5 Gigabites ou modificados há mais de 5 minutos ou ainda 5 dias

Sinal de Subtração(-):  para representar valores(argumentos) números  menores que. Exemplo, -5 pode ser usado para buscar arquivos modificados há menos 5 dias, ou minutos.

Pode receber apenas um número: para representar exatidão. Por exemplo, poderia colocar 5 para buscar arquivos modificados há exatos 5 dias ou 5 minutos.

 

  • -amin = para buscar arquivos acessados há X minutos atrás. Por exemplo
    “find -amin 4” encontraria arquivos acessados há exatos 4 minutos,
    “find -amin -4” encontraria arquivos acessados há menos de 4 minutos,
    “find -amin +4” encontraria arquivos acessados há mais de 4 minutos.
  • -anewer =  Esse teste não recebe número mas sim um arquivo. Busca por arquivos que foram acessados mais recentemente do que o arquivo passado para -anewer. Exemplo,
    “find -anewer lista.txt” encontraria todos os arquivos que foram acessados mais recentemente que lista.txt.
  • -atime = Arquivos acessados X horas atrás. Só alertando que o número passado deve ser multiplicado por 24(horas). Por exemplo,
    “find -atime +3” para encontrar arquivos acessados há mais de 72 horas
    “find -atime -2” para encontrar arquivos acessados há menos de 48 horas atrás
    “find -atime 1” para encontrar arquivos acessados há exatas 24 horas atrás.-atime Não trababalha com números fracionados/quebrados, ou seja,  se quiser encontrar arquivos acessados há menos de um dia e meio deverá colocar “find -atime 2”.
    “find -atime +1” irá encontrar arquivos acessados há mais de 2 dias atrás(de 2 dias para frente).
  • -cmin =  Encontra arquivos alterados a tantos minutos. Por exemplo
    “find -cmin +6” encontra arquivos alterados há mais de 6 minutos.
    “find -cmin -6” encontra arquivos alterados há menos de 6 minutos.
  • cnewer =  esse teste recebe um arquivo para comparação. Exemplo
    “find -cnewer  lista.txt” pesquisa por arquivos com status alterados  mais recentes que lista.txt
  • -ctime = Arquivos com status alterados a X horas.  Exemplo,
    “find -ctime +6” encontra arquivos com status alterados há mais de 6 horas.
    “find -ctime -6” encontra arquivos com status alterados há menos de 6 horas.
    Aqui vale a mesma explicação para -atime em relação a tempo fracionado.
  • -empty = Pesquisa por arquivos ou diretórios vazios
    “find -empty” retonará arquivos ou pastas vazias.
    Se quiser  buscar apenas pastas vazias pode usar -type d juntamente com -empty.
    “find -empty -type d” pesquisa por pastas vazias.
    “find -empty -type f” pesquisa por arquivos vazios.
  • -gid = busca pelo id do grupo. Exemplo,
    “find -gid 0” pesquisa os arquivos pertencentes ao grupo do super-usuário  root.
    “find -gid 500” pesquisa os arquivos pertencentes ao grupo meu grupo elder.Para ver as identidades de grupos e usuários  execute “cat   /etc/passwd”
  • -group = Pesquisa por grupo baseado no nome e não no no id(como acima em -gid). Exemplo,

“find -group root” pesquisa os arquivos pertencentes ao grupo do super-usuário  root.
“find -group elder” pesquisa os arquivos pertencentes ao grupo meu grupo elder.

  • -name = Recebe o nome de arquivo que se deseja pesquisar. -name diferencia maiúsculas de minúsculas. Exemplo,
    “find -name lista.txt” pesquisa por todo arquivo chamado lista.txt
    find -name “*txt” pesquisa por todo arquivo que termina com txt, retornaria lista.txt, nomes.txt etc….
    find -name “*lista*” pesquisa por todo arquivo que contém a palavra lista em seus nomes; retornaria lista.txt, minhalista.txt, minhalista02.doc etc…-name não é sensível a ponto de diferenciar letras maiúsculas e minúsculas. por exemplo, se procurar pelo arquivo lista.txt mas digitar “find -name Lista.txt” não irá encontrar, pois a letre L está maiúscula.
  • -iname = A mesma coisa que -name, só que não faz diferença entre palavras minúsculas e maiúsculas. Essa diferença é conhecida como case sensitive.
    find -iname lista.txt” irá encontrar lista.txt, LISTA.txt, Lista.txt, liSTa.txt etc….
  • -lname = Busca por links simbólicos. Obs.: a primeira letra é uma letra L minúscula. Exemplo,
    find -lname “*lista*” retorna todos os links simbólicos que contenham a palavra lista em seus nomes de arquivos.  -lname diferencia letras maiúsculas de minúsculas.
  • -ilname =  a mesma coisa que lname para buscar links simbólicos mas não faz diferença entre maiúsculas e minúsculas.
  • -mmin = Retorna arquivos modificados há X minutos.
    “find -mmin 4” pesquisa arquivos modificados há 4 minutos exatos
  • -mtime = Retorna arquivos modificados a X horas.
    “find -mtime +4” pesquisa arquivos modificados há mais de 4 horas
  • -newer lista.txt= Pesquisa arquivos modificados mais recentemente que lista.txt
  • -nogroup = Pesquisa por arquivos que não é de propriedade de  nenhum grupo
  • -nouser = Pesquisa por arquivos que não é de propriedade de nenhum usuário.
  • -perm =  Busca arquivos baseados em suas permissões. Por exemplo,
    “find -perm 777”   busca por arquivos que tenha todas as permissões liberadas para todos os usuários.
    “find -perm g=w” irá buscar arquivos que contenha apenas configurado permissão de escrita para grupos . Esse exemplo possivelmente não é prático, já é quase impossível existir arquivos com apenas permissão de escrita para grupos configurado e nada mais.
    “find -perm -g=w” irá buscar arquivos que tenha, além de outras permissões, a permissão de escrita para grupo configurada.
    “find -perm -u=w” irá buscar arquivos que tenha, além de outras permissões, a permissão de escrita para usuário configurada.
  • -samefile lista.txt = retorna arquivos que tenham o mesmo inode que lista.txt. Clique aqui e veja o que é inode.
  • -readable = Retorna arquivos que tenha leitura liberada para usuários.
  • -executable = Retorna arquivos que é executável por usuários.
  • -writable = Retorna arquivos que possuem ‘permissão’ de escrita liberada.
  • -regex = retorna arquivos cujos nomes combinem com a expressão regular. Exemplo,
    find -regex ‘*lista*’  retornará lista.txt, minhalista.txt etc…
  • -size = Buscar arquivos de acordo com o seu tamanho em disco.  Pode ser usado,
    b: para blocos de 512 bytes.  Esse é o usado por padrão se não for usado nenhum dos sufixos abaixo,
    c: para bytes. Ex. “find -size +3c”. Busca arquivos maiores que 3 bytes
    k: para Kilobytes (unidades de 1024 bytes).
    M: para Megabytes (unidades de 1048576 bytes). Ex. “find -size +300M”. Busca arquivos maiores que 300 Mega Bytes
    G: para Gigabytes (unidades de 1073741824 bytes). Ex. “find -size +3G”. Busca arquivos maiores que 3 Giga bytes
  • -type = Busca por tipo de arquivo.
    b: blocos. Ex, “fsudo find /dev  -type b” Busque os arquivos do tipo  bloco dentro de /dev. iria retornar, dentre outros, duas partições dos discos(HDs)
    c: caractere. Ex, “fsudo find /dev  -type c”.
    d: diretório. “find -type d”. Iria retornar pastas/diretórios
    p: pipe.
    f: arquivo regular. “find -type f”. Iria retornar arquivos
    l: link simbólico. “find -type l”. Iria retornar links simbólicos.
    s: socket. “find -type s”. Iria retornar sockets, como /dev/log
  • -uid numero:  retorna os arquivos pertencentes ao usuário com número de identificação passado. Exempo, “find /etc  -uid 500” busca por todos os arquivos pertencentes ao usuário 500, que no caso é uid do meu usuário.
  • -used numero. Número aqui representa dias. -used retorna arquivos que foram acessados X dias após  ter seu status alterado. Exemplo, “find -used 4” retorna arquivos que tiveram seu status alterado mas só foram depois de exatos 4 dias.  poderíamos usar os sinais de -, +.
  • -context textoaqui = Uso para selinux apenas.

 

Ações

  • -delete = Deleta os arquivos encontrados. Exemplo, “find -name tree.html -delete”   busca pelo arquivo tree.html e deleta ele.
    find -name “teste*” -delete  deleta todos os arquivos que tenha teste no início de seus nomes.
  • -exec comando = Executa um comando para os arquivos encontrados. os caracteres {} representam o arquivo encontrado por find. Por exemplo,
    find -name “*txt” -exec mv {} /elder/meusarquivos/   \;  esse comando busca por todos os arquivos terminados em txt e os move para dentro da pasta /elder/meusarquivos.  Lembrando que {} representa os arquivos encontrados e  \; o final dos argumentos.
  • -ok = igual a -exec, mas antes de qualquer ação é perguntado para o usuário se ele aceita a execução do comando. Exemplo,
    find -name lista.txt -ok rm {} \;
  • -ls =  Lista na tela os arquivos encontrados da mesma forma que o comando ls exibiria. mais especificamente na forma de ls -dils
  • -fls arquivo.txt=  Igual a -ls mas ao invés de exibir na tela direciona o texto retornado para um arquivo.txt. Exemplo,
    find -fls arquivo.txt   grava o resultado no arquivo arquivo.txt ao invés de exibir na tela
  • -print = Exibe o nome completo do arquivo na tela(saída padrão). Cada nome completo é seguido de uma nova linha. Obs.: Se estiver usando pipe para jogar o resultado dentro de um arquivo/programa  há a mínima possibilidade de que os arquivos que vocẽ estela procurando já contenha uma nova linha, nesse caso é preferível usar -print0
  • -print0 = Exibe na saída padrão(no meu caso o monitor)  o nome do arquivo seguido por um null caractere ao invés de uma nova linha como no caso de -print. Isto possibilita que arquivos que contenham tipos de espaços em branco em seus nomes sejam corretamente interpretados por programas que recebem o resultado de find.

 

Conclusão

No próximo artigo iremos falar sobre operadores e depois disso seguiremos para a parte prática do nosso laboratório de testes.

O comando find é muito interessante e complexo. Há na internet diversos artigos bons sobre o assunto e com conteúdo resumido que às vezes se restringe apenas a exemplos. Aqui procurei detalhar conforme o manual, porém de um modo mais didático.

Até a próxima parte.

Link Facebook: https://www.facebook.com/gnulinuxbr

Link WhatsApp: https://chat.whatsapp.com/LYHbESy75Q0GiORiexXKF4

Link Telegram: https://t.me/gnulinux_brasil

YouTube: https://www.youtube.com/channel/UCwyFWDqE0v7SwpZenjmzxYQ

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *