Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
O que find?
O programa find faz parte das instalaes de sistemas Linux, muito til na busca e
procura de arquivos na rvore de diretrios do sistema, est presente em praticamente
toda instalao padro.
Muito verstil nos critrios de pesquisa, por usurio, arquivo, data, permisses e muito
mais.
Extremamente poderoso, permite combinar resultados do find com expresses
regulares, permite que o usurio especifique uma ao como remover, copiar e etc..
usado para encontrar arquivos que correspondam a vrias caractersticas dadas, e para
desempenhar aes sobre esses arquivos.
Vem no pacote findutils e seu executvel fica em /usr/bin/find, dependendo da distro
pode mudar, use as ferramentas da distro para localizar em sua instalao.
Pgina do manual.
man find
find --help
info find
Ambiente grfico
kfind - KDE - menu K -> executar comando -> na caixa de dialogo digite kfind
Ou na linha de comando (prompt) de um konsole kfind
No Gnome use gsearchtool
No navegador, no endereo da URL : file:/// exibe a arvore de diretrios, funciona
no Firefox, Konqueror, Galeon, Mozilla ...
filtros e redirecionamento
Combinar com outros filtros ou desviar o resultado para arquivo.
Desvia o resultado do console para arquivo meuteste.
find /home/zago/guiaz/ -name "*.pdf" -exec echo {} \; > meuteste
Inverter a seleo use a diretiva -v para pegar maiusculas e minusculas use -i.
find /home/zago/guiaz/ -name "*.txt" -exec echo {} \; | grep -iv gif
Cuidado com estes filtros, o grep trabalha com os resultados que vem antes do pipe |,
tanto echo como rm ficam antes, a ao de echo exibir o resultado filtrado por find,
ento o grep pega este resultado do find para filtrar, com o rm no lugar do echo isto no
acontece, o rm simplesmente apaga o que atender a condio de procura do find,
portanto com rm o filtro que vem depois de "|" fica sem efeito.
Exemplo para localizar e exibir no formato de ls -la. listar todos arquivos do usurio
zago, troque pelo seu usurio na linha abaixo.
find -user zago -exec ls -la {} \;
Inverter o resultado, listar tudo que no for do usurio informado.
find . ! -user zago -exec ls -la {} \;
find . ! -user root -exec ls -la {} \;
encontra todos os arquivos cujas permisses correspondam a 111 (executvel)
find . -perm +111
find / -perm +111 -type f
Procurar em diretrio especifico, exemplo os executaveis do KDE.
find /usr/lib/kde3/bin/ -perm +111 -type f
procura no HD inteiro, (em HD com muitos arquivos esta procura pode ser demorada).
find / -name sa*
find / -name nome-do-arquivo
Procurar por nomes de arquivos que contm determinada expresso no nome, por
exemplo: procurar no diretrio /home/zago/guiaz por arquivos que contenha no nome o
termo cl9
find /home/zago/guiaz -print |grep -i "cl9"
/home/zago/guiaz/samba/samba-cl9.txt
/home/zago/guiaz/samba/smb.conf-cl9
/home/zago/guiaz/samba/samba-faq-cl9.txt
Outros exemplos:
find /home/zago/ -iname "cache*"
Ou redirecione a saida para arquivo e depois verifique o contedo do arquivo com seu
editor de texto preferido, exemplo da linha de comando acima, redirecionando o
resultado para /tmp/meuteste.txt
Depois de conferir o resultado, para remover, faa a troca do echo ou ls -la por rm,
exemplo.
find /home/zago/guiaz/ -name "*.txt~" -exec rm {} \;
O mesmo comando acima modificado pra pedir confirmao, com -ok pede
confirmao para excluso, ideal pra usar na linha de comando.
find /home/zago/guiaz/ -name "*.txt~" -ok rm {} \;
Ex.
[zago@faqcl9 guiaz]$ find /home/zago/guiaz/ -name "*.gif" -ok rm
{} \;
< rm ... /home/zago/guiaz/tmp/admcorreiopq.gif > ? y
< rm ... /home/zago/guiaz/zagop.gif > ? n
< rm ... /home/zago/guiaz/pinguin.gif > ? n
Procura em todos os diretrios e apagar todos os arquivos .old, pede confirmao pra
cada um.
find / -name "*.old" -ok rm {} \;
mkdir /home/rpmsmart
localizar e listar, testar o resultado do comando
find /var/lib/smart/packages -mtime +30 -exec echo {} \;
mover arquivos, trocar echo no comando acima por rm no comando
abaixo.
find /var/lib/smart/packages -mtime +30 -exec mv {}
/home/rpmsmart \;
Com rm - remover todos que o filtro pegar, exceto os indicados depois da negao (!)
find . -name A-\*.html ! -name A-menu.html ! -name A-judas.html
-exec rm -f {} \;
-n
-amin n
Arquivo foi acessado em n minutos atrs.
-anewer file
Arquivo foi acessado mais recentemente do que file
tenha sido
modificado. -anewer afetado por -follow somente
se -follow
vier antes que -anewer na linha de comandos.
horas.
-atime n
Arquivo foi acessado pela ltima vez nas ltimas *24
-cmin n
atrs.
-cnewer file
O status do arquivo foi alterado mais recentemente
do que file
foi modificado. -cnewer afetado por -follow somente
se -follow vier antes que -cnewer na linha de comando.
-ctime n
O status do arquivo foi mudado nas n*24 horas atrs.
-mmin n
atrs.
-mtime n
Os dados foram modificados em at n*24 horas atrs
-newer
-newer file
O arquivo foi modificado mais recentemente que file.
-newer na
afetado
por
linha de comando.
f -mmin -3
|
|
|
|
|
|____ tempo para o paramentro anterior
|
|
|
|
|
|_ f = arquivo regular, d=diretrios (veja
opes no man)
|
|
|____ arquivo do tipo definido no parametro
seguinte
|
|_______ caminho da pesquisa, diretrio e sub-diretrios onde
pesquisar
|_________ executar o comando find
Passe o resultado do comando para outro aplicativo (comando), use "|" entre o final da
linha e os comandos como exec, xargs, cut, sed, awk e etc...
Alguns exemplos com xargs executar rm, exec executar cp, aplicar somente nos
arquivos que atende a condio, .
remover arquivos modificados a menos de 3 minutos.
find /tmp/txt -type f -mmin -3 | xargs rm -rf
remover arquivos modificados a mais de 3 dias (3*24horas)
find /tmp/txt -mtime +3 -type f | xargs rm -rf
Copiar para outro diretrios os modificados a menos de 3 minutos.
find /tmp/txt -type f -mmin -3 -exec cp -ax {} /home/backup/faq \;
Mais alguns exemplos de comando.
-mtime 0 procura por modificados nas ultimas 24 horas.
Procurar em todo o HD find / -mtime 0
Remover arquivos por data, alguns exemplos;
find /dir -mtime +30 -exec rm {} \;
Onde +30 = mais de 30 dias passados, em lugar de -mtime +30 pode variar com -ctime
e -atime, com o -exec pode modificar (rm), para outras opes como cp, mv ou at
mesmo exibir o resultado no console com echo para testar e conferir antecipadamente o
que ser apagado com rm, ou simplesmente ver quais arquivos no foram modificados
nos ultimos 30 dias, exemplo;
find /home/zago/guiaz -mtime +30 -exec echo {} \;
find /home/zago/guiaz -mtime +30 -exec ls -la {} \;
Se o resultado no console for o que realmente quer apagar, use a seta para voltar a linha
de comando e altere de echo para rm.
Combinar pesquisa incluindo data e nome de arquivo, exemplo de procura por arquivos
que iniciam com "z" e no foram modificados a mais de 90 dias.
find /home/zago/guiaz/ -mtime +90 -and -name "z*" -exec echo {} \;
No exemplo acima exibe o resultado no console, caso queira outra ao, altere echo para
o comando que deseja executar; rm, cp, mv e etc...
Procurar abaixo de um diretrio por arquivos modificados nas ultimas 24 horas, menos
de um dia, por exemplo em tudo abaixo de /home/zago
find /home/zago/guiaz -mtime 0
Parte do script que utilizo pra atualizar o FAQ (site), em resumo faz a copia para outro
diretrio dos arquivos modificados nas ultimas 24 horas e depois envia por ssh pra uma
maquina e por ftp pra outra
Neste exemplo cortei varias linhas pra encurtar o script, a finalidade aqui servir de
modelo.
#!/bin/bash
cd /home/zago
rm -rf Linux-BR-FAQ*
tar -zcvf Linux-BR-FAQ-`date +%d.%b.%Y`.tar.gz --exclude
/home/zago/guiaz/apostilas --exclude /home/zago/guiaz/drivers
/home/zago/guiaz
chmod 777 Linux-BR-FAQ-`date +%d.%b.%Y`.tar.gz
#rm -rf /home/zago/atusite
mkdir /home/zago/atusite
cd /home/zago/guiaz
#apaga todos .txt~ (temporarios)
find /home/zago/guiaz/ -name "*.txt~" -exec rm {} \;
find -maxdepth 1 -mtime 0 -exec cp {} /home/zago/atusite \;
cd /home/zago/guiaz/samba
mkdir /home/zago/atusite/samba
find -maxdepth 1 -mtime 0 -exec cp {} /home/zago/atusite/samba \;
cd /home/zago/guiaz/modem
mkdir /home/zago/atusite/modem
find -maxdepth 1 -mtime 0 -exec cp {} /home/zago/atusite/modem \;
#--corte de algumas linhas-cd /home/zago/atusite
scp -r * zago@192.168.1.2:/srv/www/default/html/zago/
cd /home/zago
scp Linux-BR-FAQ* zago@192.168.1.2:/srv/www/default/html/zago/faq/
rm -rf Linux-BR-FAQ*
cd /home/zago/docs
ftp -vn www.zago.eti.br < atusite
rm -f /home/zago/atusite/modem/*
rm -f /home/zago/atusite/samba/*
poweroff
exit
A primeira linha muda de diretrio e a segunda executa o script de ftp "atusite" que est
dentro do diretrio docs, dentro deste "atuftp" tem os comandos de ftp, faz upload por
diretrio, o contedo dele com a senha modificada este:
# cat /home/zago/docs/atusite
user meulogin minhasenha
prompt
lcd /home/zago/atusite/
cd htdocs
mput *
lcd /home/zago/atusite/modem
cdup
cd modem
mput *
lcd /home/zago/atusite/samba
cdup
cd samba
mput *
#---corta---
find + sort
Passe o resultado do "find" via pipe "|" para "sort" ordenar. Resulado longo ou filtro
complexo, considere salvar em arquivo para depois ordenar.
Listar arquivos por ordem de data.
find /tmp -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort
Altere o caminho para o diretrio que deseja pesquisar, tambm pode alterar os
separadores
/tmp -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort
Alguns exemplos mostrando somente nomes de arquivos
Em ordem normal
find /tmp/guiaz -type f -printf '%f\n' | sort
Invertendo a ordem
find /tmp/guiaz -type f -printf '%f\n' | sort -r
resultado na mesma linha sem separador
find /tmp -type f -printf '%f'
resultado na mesma linha com separador, neste exemplo " ; ", troque
pelo caractere desejado
find /tmp/guiaz -type f -printf '%f ; '
Com quebra de linha, um nome por linha (\n) insere a quebra de linha
find /tmp/guiaz -type f -printf '%f\n'
Outras ferramentas
Criar arquivo com a lista de arquivos que contm "dicas-l.unicamp.br/", eliminar os
repetidos com sort -u
grep "dicas-l.unicamp.br/" -r /home/zago/guiaz/ | cut -d":" -f1 | sort -u > /tmp/altera.txt
find + printf
Alguns exemplos mostrando somente nomes de arquivos
Em ordem normal
find /tmp/guiaz -type f -printf '%f\n' | sort
Invertendo a ordem
find /tmp/guiaz -type f -printf '%f\n' | sort -r
resultado na mesma linha sem separador
find /tmp -type f -printf '%f'
Consulte o manual do find (man find), tem muitas opes, vema mais exemplos e cpia
parcial do manual do Conectiva 10 (em portugus).
find - exemplos em linha de comando e script
http://www.zago.eti.br/find.html
Converter arquivos
Linha de comando para converter de .txt para .hmtl via txt2tags, aplicada no script de
atualizao do FAQ (veja o script http://zago.eti.br/atusite).
No sei lidar com HTML, meus html so textos formatados para txt2tags com
terminao .t2t, antes de fazer upload precisa rodar o script de converso para html, para
evitar acidentes, fao copia e converso dos arquivos em outro diretrio, um script faz a
copia para outro diretrio, copia somente dos arquivos modificados nas ultimas 24
horas, neste script, antes do upload executa estas linhas:
find /home/zago/atusite/ -name "*.t2t" -exec python
/home/zago/t2t/txt2tags -t html {} \;
A segunda linha apaga todos os .t2t, desta forma somente os html sobem para o site, na
minha maquina no tem arquivos .html e no site no tem .t2t.
Faa adaptao ou modifique para sua aplicao, tem muitas possibilidades de uso, pode
substituir o uso de python por (tr), (dos2unix) e muitos outros.
Alterei o script para criar o html no mesmo diretrio dos .txt, achei melhor incluir os
html na copia do FAQ compactada para download.
Converter em todos os sub-diretrios, converter somente os modificados nas ultimas 24
horas.
find /home/zago/guiaz/ -mtime 0 -name "*.t2t" -exec python /home/zago/t2t/txt2tags -t
html {} \;
dir e mdir
mdir - Quando instalado o pacote mtools, permite o uso do dir para acesso ao floppy,
unidade de disquete, com comandos no formato DOS, veja mais sobre o pacote mtools
no FAQ
http://www.zago.eti.br/mtools.txt
dir - algumas distro, como exemplo SUSE, quando instalado o pacote coreutils, pode
usar o comando dir no sistema de arquivos do Linux.
ls
ls - listar arquivos, tem muitas opes como lsusb, lspci, lsmod, e muito mais, veja mais
sobre ls e outras opes que iniciam com ls
http://www.zago.eti.br/ls.txt
Locate
Locate faz parte do metapacote slocate, faz parte dos pacotes instalados na maioria dos
perfis de instalao, para instalar, no seu gerenciador de pacotes procure por slocate
Locate localiza arquivos mais rpido que o find, a explicao simples, o find varre
todo o caminho indicado, locate consulta um banco de dados, para obter resultados mais
precisos, atualize o banco de dados antes da pesquisa.
updatedb
(1)
(1)
(1)
(1)
(1)
(1)
(8)
(8)
Quem quem no entenda o ingles faa como eu, use a intuio que funciona, tente com
variaes da palavra, partes da palavra que voce acha que possa ser, sinominos, e etc...,
vale tambm usar um tradutor, mesmo que seja o google ou altavista para traduzir
palavras do ingles para portugues, pode acreditar, muito simples, fcil e prtico, basta
tentar.
Diretamente do man whatis
whatis - procura por palavras no banco de dados do whatis.
SINOPSE
whatis palavra_chave ...
DESCRIO
O whatis procura palavras-chaves em um conjunto de arquivos
de banco de
dados contendo pequenas descries de comandos do sistema, e
exibe o
resultado na sada padro. Somente sero exibidas palavras
em caso de
concordncia completa.
(1)
whereis nome_do_pacote
whereis ping
ping: /bin/ping /usr/share/man/man8/ping.8.gz
man whereis
which
which ping
/bin/ping
echo `which ping`
/bin/ping
ping-0.17-25611cl
fping-2.2b1-11524cl
kde-i18n-es-docs-kdegames-kjumpingcube-3.1.1-26675cl
Use o gerenciador de pacotes da distro para obter mais informaes sobre os pacotes do
sistema.
find + sed
Pegar somente o nome de arquivos sem a extenso, ou remover a extenso.
Listar somente nome de arquivos
find /home/zago/guiaz -name "*.txt" -exec basename {} \;
listar somente nome de arquivos sem extenso
find /tmp/guiaz -name "*.txt" -exec basename {} \; | sed
s/"\.txt"//g
Indicaes
Tutoriais, documentao e outros FAQ relacionados a procura ou expresses regulares.
find + rm, localizar e remover arquivos
http://www.zago.eti.br/rm.txt
Localizar expresses nos logs, acompanhar os registros no momento da gravao,
procure por tail em:
http://www.zago.eti.br/log.txt
Dicas sobre data, nomear arquivos com data, diretivas e mais sobre data.
http://www.zago.eti.br/script/data.html
Pgina principal deste site (FAQ)
http://www.zago.eti.br/menu.html