Buscar

Aula21 find

Prévia do material em texto

Programação	
  para	
  Servidores	
  
Aula	
  21	
  
Sumário	
  
•  Buscando	
  arquivos;	
  
•  Exercícios.	
  
2	
  
Procurando	
  arquivos	
  
•  Podemos	
  u@lizar	
  o	
  comando	
  find	
  para	
  buscar	
  por	
  
arquivos	
  recursivamente	
  a	
  par@r	
  de	
  um	
  determinado	
  
diretório.	
  Sua	
  sintaxe	
  é:	
  
find [arquivos_ou_diretórios] [opções] 
•  As	
  principais	
  opções	
  do	
  comando	
  find	
  são:	
  
-atime n	
  	
   lista	
  arquivos	
  com	
  horários	
  de	
  acesso	
  iguais	
  a	
  n	
  dias.	
  Se	
  
for	
  u@lizado	
  +n,	
  deverá	
  ter	
  sido	
  acesso	
  a	
  mais	
  de	
  n	
  dias,	
  
enquanto	
  -n	
  indica	
  a	
  menos	
  de	
  n	
  dias;	
  
-mtime n	
  	
   lista	
  arquivos	
  com	
  horário	
  de	
  modificação	
  de	
  n	
  dias.	
  Se	
  
for	
  u@lizado	
  +n,	
  deverá	
  ter	
  sido	
  modificado	
  a	
  mais	
  de	
  n	
  
dias,	
  enquanto	
  	
  	
  -n	
  indica	
  a	
  menos	
  de	
  n	
  dias;	
  
3	
  
Procurando	
  arquivos	
  
•  Comando	
  find	
  (con@nuação...):	
  
-name 'padrão' Seleciona	
  arquivos	
  que	
  casem	
  com	
  o	
  padrão	
  de	
  
caracteres	
  coringa;	
  
-prune	
  	
   Não	
  entra	
  recursivamente	
  nos	
  diretórios;	
  
-size n	
  	
   Seleciona	
  arquivos	
  de	
  tamanho	
  n;	
  
-type t	
  	
   Seleciona	
  arquivos	
  pelo	
  @po	
  (d=diretório,	
  f=arquivo);	
  
-user u	
  	
   Seleciona	
  arquivos	
  do	
  usuário	
  u	
  (nome	
  ou	
  UID);	
  
-exec	
   permite	
  executar	
  operações	
  sobre	
  os	
  arquivos	
  
encontrados	
  (esta	
  opção	
  deve	
  ser	
  u@lizada	
  com	
  
MUITO	
  CUIDADO).	
  
4	
  
Procurando	
  arquivos	
  
•  Exemplos:	
  
–  Listar	
  arquivos	
  no	
  diretório	
  atual	
  que	
  foram	
  modificados	
  hoje:	
  
find –mtime 0 
–  Listar	
  arquivos	
  no	
  diretório	
  /etc	
  (e	
  todos	
  os	
  seus	
  
subdiretórios)	
  que	
  não	
  foram	
  modificados	
  há	
  mais	
  de	
  1	
  ano:	
  
find /etc –type f –mtime +365 
–  Listar	
  arquivos	
  apenas	
  no	
  diretório	
  /etc	
  que	
  não	
  foram	
  
modificados	
  há	
  mais	
  de	
  1	
  ano:	
  
find /etc/* –prune –type f –mtime +365 
–  Listar	
  arquivos	
  no	
  diretório	
  atual	
  que	
  tem	
  tamanho	
  maior	
  ou	
  
igual	
  a	
  10	
  Kbytes:	
  
find –type f –size +10 
5	
  
Procurando	
  arquivos	
  
•  Exemplos:	
  
–  Listar	
  arquivos	
  cujos	
  nomes	
  casem	
  com	
  o	
  padrão	
  
aula##_ex##.sh,	
  onde	
  os	
  símbolos	
  #	
  representam	
  dígitos:	
  
find –name aula[0-9][0-9]_ex[0-9][0-9].sh 
–  Copiar	
  arquivos	
  que	
  tenham	
  mais	
  que	
  10	
  Kbytes	
  do	
  diretório	
  
para	
  o	
  diretório	
  abc:	
  
find -type f -size +10 -exec cp {} abc \; 
–  Imprimir	
  na	
  tela	
  o	
  conteúdo	
  dos	
  arquivos	
  no	
  diretório	
  atual	
  que	
  
não	
  foram	
  modificados	
  há	
  mais	
  de	
  1	
  ano:	
  
find –type f –mtime +365 -exec cat {} \; 
–  Remover	
  os	
  arquivos	
  do	
  diretório	
  atual	
  que	
  não	
  foram	
  
modificados	
  há	
  mais	
  de	
  1	
  ano:	
  
find –type f –mtime +365 -exec rm -i {} \; 
6	
  
Procurando	
  arquivos 
•  Exemplo:	
  script	
  para	
  excluir	
  arquivos	
  que	
  não	
  são	
  
acessados	
  há	
  pelo	
  menos	
  1	
  ano:	
  
if [ "$#" = "0" ]; then 
 echo "Uso: $0 dir1 dir2 dir3 ... dirN" 
 exit 1 
fi 
while (( "$#" )); do 
 if [[ $(ls "$1") == "" ]]; then 
 echo "Diretório vazio!" 
 else 
 find "$1" -type f -atime +365 -exec rm -i {} \; 
 fi 
 shift 
done 
7	
  
Exercícios	
  
•  Escrever	
  scripts	
  para	
  as	
  seguintes	
  tarefas:	
  
1.  Listar	
  todos	
  os	
  diretórios	
  dentro	
  do	
  diretório	
  passado	
  por	
  parâmetro	
  
e,	
  ao	
  final,	
  mostrar	
  o	
  total	
  de	
  diretórios	
  encontrados.	
  Não	
  devem	
  ser	
  
listados	
  arquivos	
  comuns;	
  
2.  Reescrever	
  o	
  script	
  do	
  exercício	
  anterior	
  para	
  listar	
  somente	
  os	
  
arquivos	
  comuns.	
  Diretórios	
  não	
  devem	
  ser	
  listados;	
  
3.  Procurar	
  os	
  arquivos	
  chamados	
  core.????	
  (as	
  interrogações	
  
representam	
  dígitos)	
  no	
  diretório	
  passado	
  como	
  parâmetro	
  (e	
  
subpastas)	
  e	
  registra	
  os	
  arquivos	
  encontrados	
  num	
  arquivo	
  no	
  
diretório	
  /tmp;	
  
4.  Procurar	
  arquivos	
  cujos	
  nomes	
  terminam	
  em	
  '.bak'	
  no	
  diretório	
  
passado	
  como	
  parâmetro	
  (e	
  subpastas)	
  	
  e	
  os	
  move	
  para	
  o	
  diretório	
  /
tmp/bak	
  (criar	
  o	
  diretório	
  caso	
  ele	
  não	
  exista	
  e	
  exibir	
  uma	
  msg).	
  Ao	
  
final,	
  exibir	
  uma	
  mensagem	
  dizendo	
  quantos	
  arquivos	
  foram	
  
movidos.	
  Se	
  nenhum	
  arquivo	
  for	
  encontrado,	
  NEM	
  CRIAR	
  o	
  diretório.	
  
8

Outros materiais