| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

find

Page history last edited by PBworks 16 years, 9 months ago

O comando find é muitíssimo poderoso, mais flexível e rápido do qualquer front-end.

Podemos usar uma série de parâmetros e opções para realizar buscas.

 

Exemplos de buscas com o find


O comando abaixo exibe arquivos modificados a mais de 7 dias (somente o nome e data)
find ~/ -mtime +7 -printf "%f %AD\n"


Arquivos criados a menos de dez minutos e "-and -a" com extensão txt
   find ~/ -cmin -10 -a -iname *.txt

   find ~/ -size +500M

  find ~ -size +10000 -a -iname *.pdf

arquivos com exatamente 1000 caracteres
   find . -size 1000c 
Arquivos entre 599 e 701 caracteres
   find . -size +599c -and -size -701c  

Buscando em dois diretórios htdocs e cfi-bin
   find htdocs cgi-bin -name "*.cgi" -type f -exec chmod 755 {} ;

Contar quantos txt há em minha pasta pessoal "~/" (combinando com o comando wc)

  find ~/ -iname *.txt | wc -l

Mostra todos os arquivos pdf que não sejam maiores que 2000 bytes
tudo que estiver após a exclamação será negado.
  find ~/ -iname *.pdf ! -size +2000

Invertendo a lógica do comando acima no primeiro caso tirando a exclamação, no segundo invertendo o sinal de + para menos, veja:
  find ~/ -iname *.pdf -size +2000
ou
  find ~/ -iname *.pdf ! -size -2000

Procura pdf's de tamanho maiores que 2000 bytes e mostra somente o nome sem o caminho "basename"
  find ~/ -iname *.pdf -a -size +2000 -exec basename {} ;

Procurar por arquivos de um usuário especifico

  find / -user sergio
  find . -user root

Busca com opções. No caso arquivos html ou htm
  find ~/ ( -name *.htm -o -name *.html ) -atime +5
  find ~/ -iregex '.*html?' -atime +5

**Observações importantes** mudar permissão somente em diretórios "-d"
    find . -type d -exec chmod 755 {} ; 
    Note: chmod -R 755 ./*   também aplica a modificação mas também pega arquivos

!!Usando o find com o xargs
Usando o parâmetro -exec ele executa cada vez que acha o arquivo, repassando via pipe "|" para o comando xargs o find faz primeiro as buscas tornando-se mais rápido.
   find   ~/ -type f  -print  |  xargs  rm -rf

Procure no diretório atual "." arquivos "f" imprima a lista "-print" filtre com o egrep ignorando maiúsculas e minúsculas "i" a "expressao".
   find . -type f -print | xargs egrep -i "expressao"

Encontrando arquivos que não contenham extensão .c ou .o
  find ~/docs -type f | egrep -v '.[oc]'

Qual a diferenca entre os comandos abaixo?

% find . -user queiroz -exec ls {} ;
% find . -user queiroz -print | xargs ls

A diferenca e que no primeiro find o comando ls e executado uma vez para cada arquivo encontrado. Se forem encontrados 1000 arquivos o comando ls sera executado 1000 vezes.

Ja no segundo exemplo, com a saida do find redirecionada para o comando xargs, o comando ls sera executado sobre um grupo de arquivos de cada vez e nao uma vez para cada arquivo. O que ira determinar o numero de vezes que o comando xargs executara o comando ls e justamente o tamanho da linha de comandos. O comando xargs ira dividir a saida gerada pelo comando find em blocos compativeis com a capacidade do sistema de maneira a que nao ocorra um erro quando da execucao, em nosso caso, do comando ls.

Em outras palavras, suponhamos que o comando find descubra 2000 arquivos sobre os quais o comando xargs devera executar o comando ls. O limite maximo de arquivo sobre os quais o comando ls pode atuare de 500. O comando xargs automaticamente realizara a divisao desta entrada em quatro blocos de 500 arquivos.

Concluindo, o comando xargs e bem mais eficiente do que a diretiva -exec do comando find, por exigir menos recursos computacionais para executar a mesma tarefa. uma vez sobre todos os arquivos encontrados. 

Veja o comando abaixo (ainda não testado) procure em /tmp arquivos com tempo de acesso superior a sete dias "-atime +7" e "and" usuário corrente $USER, redirecione através do xargs para o comando de remoção "rm", sem fazer perguntas -f
   find /tmp -atime +7 -type f -a -user $USER | xargs rm -rf
   find /tmp -atime +7 -type f | xargs rm -f

Procura todos os arquivos suid e setgid executables:
find / ( -perm -4000 -o -perm -2000 ) -type f -exec ls -ldb {} ;

!!Redirecionando o erro padrão  "2>/dev/null" para desviar as mensagens 
de erro por acesso não root
  find / -type f -name dummy 2>/dev/null

!!Parâmetros
 -ctime
 -mtime
 -atime
 -cmin
 -amin
 -mmin
 -user
 -nouser
 -uid
 -gruop
 -gid
 -and  ou  -a
 -or ou -o
 -size
 -name 
 -iname

!!Usando ''printf''
O argumento -printf pode receber vários parâmetros
  find ~/ -iname *.txt -printf %f\n   "\n faz quebra de linha"
  These are used the most:
  %p	imprime o nome do arquivo com o caminho
  %m	permissions of file, displayed in octal.
  %f	imprime o nome do arquivo sem o caminho
  %g	name of the group the file belongs to.
  %G    gid 
  %U    uid
  %h	display name of directory file is in, filename isn't included.
  %u	username of the owner of the file
  %c    imrprime -ctime
  %a    tempo de acesso
  %m    imprime modo de permissão (formato octal)

   %A(caractere)  - devolve o "atime" (tempo de acesso)
          %AD   imprime a data tipo dia/mes/ano (data de acesso)
          %AH   imprime a hora
          %AT   /hh/mm/ss
          %A+   data e tempo separados pro "+"
          %Ax   mm/dd/aaaa

          find ~/ -iname *.txt -printf "%f %Ax %AT \n"

          O comando acima exibe arquivos assim:
  
          nome        data         hora
          serii.txt   04-01-2007   12:42:07 

    %C(caractere)  "ctime" 
    %T(caractere)  "mtime" 


  
Um último exemplo 
  find . -iname *.txt -printf "%p %m %AA %Ad de %AB de %AY %AX\n"  isto retorna algo como:
  /caminho/leia-me.txt 644 sexta 23 de junho de 2006 10:30:53
  

Para imprimir o nome do arquivo com o modo de permissão octal use
   find ~ -iname *.txt -printf "%p %m\n"
acrescentando o parâmetro %a retorna o ultimo acesso de acordo com "-ctime"
   find ~ -iname *.txt -printf "%p %a %m\n"
printf com os parâmetros "%p %m %Ax\n"  retorna algo como 
 /caminho/leia-me.txt 644 23/06/06
printf com os parâmetros "%p %m %g %u %Ax\n"  retorna algo como 
  /caminho/leia-me.txt usuario grupo 644 23/06/06

  -printf "%f %u %g %m %Ax %AX\n"  veja detalhes abaixo
  %f nome sem o caminho
  %u usuário
  %g grupo
  %m modo de permissão
  %Ax dada de acesso no modo dd/mm/aa
  %AX hora de acesso do tipo 18:15:23
  \n quebra de linha

!!Usando Expressões regulares
  $ find . -regex './ch0[1-2]_0[1-3].*'
  ./ch01_01.html
  ./ch01_02.html
  ./ch02_01.html
  ./ch02_02.html
  ./ch02_03.html

How do I search for files, then do something with the result?

    * Find all .conf files, then search through them to see if they contain any IP addresses, then print the filename, line number and the line containing the address

      find /etc -name *.conf -exec grep -Hn '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} ;

!Fazendo um backup
  tar -zcvf ultimamod.tar.gz `find . -mtime -1 -type f -print` 

!Outros exemplos
Localizar todos os arquivos do tipo txt gerados nos últimos 20 minutos, menos os cookies do navegador, que são cosntantemente gerados e não devem ser buscados

  find ~/ -iname *.txt -cmin -20 | grep -v "cookies"

Usando expressões regulares
 find . -regex './ch0[1-2]_0[1-3].*'
./ch01_01.html
./ch01_02.html
./ch02_01.html
./ch02_02.html
./ch02_03.html


 

Limpando miniaturas de imagens no nautilus

  find ~/.thumbnails -type f -atime +7 -exec rm {} ;

 

Referências

http://www.zago.eti.br/find.html

http://www.tldp.org/LDP/abs/html/index.html

http://www.absoluta.org/

http://www.linux.ie/newusers/beginners-linux-guide/find.php

http://www.oreilly.de/catalog/unixcd/chapter/c02_077.htm

http://www.mattwalsh.com/twiki/bin/view/Main/UsingTheFindCommand

manual do find "man find"

Comments (0)

You don't have permission to comment on this page.