Escolar Documentos
Profissional Documentos
Cultura Documentos
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
-t find |lpr
Ambiente grfico
kfind - KDE - menu K -> executar comando -> na caixa de dialogo digite
kfind
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 {} \;
procura no HD inteiro, (em HD com muitos arquivos esta procura pode ser demorada).
find / -name sa*
find / -name nome-do-arquivo
No exemplo acima listar somente arquivos com terminao em .pdf em minusculo, prefira a
opo abaixo que no diferencia maiusculo de minusculo e procura em qualquer parte do nome
do arquivo.
find /home/zago -print | grep -i "pdf"
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
/lib/modules/2.6.5-63077clsmp/kernel/drivers/char/agp/nvidia-agp.ko
[root@cl10 root]# find /lib/modules/*2.6.5* -iname "*smp*"
/lib/modules/2.6.5-63077clsmp
[root@cl10 root]# find /lib/*mod* -iname "*driv*"
/lib/modules/2.6.5-63077cl/kernel/drivers
/lib/modules/2.6.5-63077cl/kernel/sound/drivers
/lib/modules/2.6.5-63077clsmp/kernel/drivers
/lib/modules/2.6.5-63077clsmp/kernel/sound/drivers
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
find /home/zago/guiaz/ -name "*.txt~" -exec ls -l {} \; > /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 {} \;
Listar no console os arquivos que esto sendo removidos, no tem pedido de confirmao,
somente exibe no console os arquivos removidos.
find /home/zago/guiaz/ -name "*.txt~" -exec rm -fv {} \;
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 {} \;
Cuidado com este comando, no cria a arvore de diretrios no destino, arquivos de subdiretrios
que atente a condio sero copiados no raiz do diretrio destino, portanto mistura tudo e
arquivos com mesmo nome sero sobrescritos.
Para no descer nos sub-diretrios, copiar somente arquivos do diretrio indicado, use (maxdepth 1), exemplo para copiar somente arquivos do diretrio corrente e que foram
modificados nas ultimas 24 horas.
find -maxdepth 1
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.
-atime n
Arquivo foi acessado pela ltima vez nas ltimas *24 horas.
-cmin n
O status do arquivo foi alterado em at n minutos 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
Os dados dos arquivos foram modificados em n minutos atrs.
-mtime n
Os dados foram modificados em at n*24 horas atrs
-newer file
O arquivo foi modificado mais recentemente que file.
-newer
afetado por
-follow somente se -follow vem antes de -newer na
linha de comando.
Exemplo de comando para listar somente os arquivos modificados durante os ultimos 3 minutos
dentro do diretrio /tmp/txt.
find /tmp/txt -type f -mmin -3
Onde:
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
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
{} \;
find /home/zago/atusite/ -name "*.t2t" -exec rm {} \;
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
nome-do-arquivo
Note que o updatedb precisa ser feito periodicamente, mas no toda vez que for executar o
locate, normalmente est configurado no crontab para atualizao periodica, com esta
configurao em maquinas que ficam ligadas direto, a atualizao automatica.
Consulte o manual man
locate
(1)
cpio
dd
ginstall [install]
mcopy
scp
xfs_copy
xfs_rtcp
(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
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
basename
Outras ferramentas como cut e awk servem como filtro para pegar partes do nome.
Localizar e substituir em todos arquivos
find /home/zago/guiaz -name "*.*" -exec sed -i s/"Dicas-L.unicamp.br"/Dicas-l.com.br/g {} \;
sed - Localizar e substituir palavras em arquivos
http://www.zago.eti.br/script/sed.html
ls - FAQ e exemplos com resultados de ls
http://www.zago.eti.br/ls.txt
Quando a pesquisa for complexa e tiver dificuldade na montagem da linha de comando, crie um
script para ser executado com find, exemplo para chamar o script procura.sh, execute:
find /caminho/diretorio -exec procura.sh {} "frase que procuro" \;
find / -type l
Cuidado com este comando, no cria a arvore de diretrios no destino, arquivos de subdiretrios
que atente a condio sero copiados pra raiz do diretrio destino, portanto mistura tudo e
sobrescreve arquivos com mesmo nome.
Manter as permisses e ID do dono do arquivo acrescente -ax, ex.
find /home/zago/guiaz -name \*.txt -type f -exec cp -ax {} /home/backup/faq \;
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