O comando FIND (busca)
Embora muitas pessoas achem que é medonho e terrível fazer buscar através do terminal, elas desconhecem o poder de um verdadeiro sistema de busca, principalmente porque a maioria está acostumada com o Windows.
Eu não irei tentar explicar todo o comando FIND, pois as possibilidades são enormes, mas focarei as principais possibilidades do comando FIND.
Sempre que surgir uma dúvida, consulte o manual do FIND (digite no shell: man find).
Eu começarei explicando o básico e partindo da idéia de que você entendeu os exemplos, eu vou aumentando a complexidade dos comandos, ou seja, na primeira linha você não precisa ter conhecimento algum sobre o FIND, mas na vigésima linha eu já considero que você compreendeu os comandos anteriores.
- Buscando arquivos e pastas:
- No diretório atual:
find . -name arquivoX
- No diretório /home:
find /home -name arquivoX
- Em todos os locais possívels:
find / -name arquivoX
- No diretório atual:
- Buscando apenas arquivos ou apenas pastas:
- Apenas pastas:
find /home -type d arquivoX
- Apenas arquivos:
find /home -type f arquivoX
- Consulte outras possibilidades no manual do comando FIND;
- Apenas pastas:
- Buscando arquivos ou pastas com determinado CHMOD (permissão):
- Arquivos com CHMOD 777:
find /home -type f -perm 777
- Arquivos e pastas com CHMOD 777:
find /home -perm 777
- Arquivos com CHMOD 777:
- Buscando arquivos com determinado tamanho:
- Com mais de 400kBytes:
find /home -type f -size +400k
- Com menos de 5mBytes:
find /home -type f -size -5M
- Com mais de 850kBytes e menos de 95mBytes:
find /home -type f -size +850k -size -95M
Otimizando:
find /home -type f -size +850k && -95M
- Sugiro consultar o manual para descobrir mais possibilidades e otimizações;
- Com mais de 400kBytes:
- Buscando arquivos verificando datas:
- Modificado há N dias (o N é multiplicado por 24 horas automaticamente):
find /home -type f -atime N
Se N houver parte fracionária, ela será ignorada;
- Modificado há até 5 (ou N) minutos:
find /home -type f -ctime 5
find /home -type f -ctime N
- Modificado há mais de 5 dias, mas não mais que 10 dias:
find /home -type f -atime -10 -atime +5
- Modificado há pelo menos 10 minutos, mas não mais que 1 hora:
find /home -type f -ctime +10 -ctime -60
Otimizando:
find /home -type f -ctime +10 && -60
- Modificado há N dias (o N é multiplicado por 24 horas automaticamente):
- Buscando por arquivos de determinados usuários:
-
find /home -type f -user root -name arquivoX
-
- Executando comandos com os arquivos localizados:
- Sintaxe:
find /home -type f -perm 777 -user root -exec chmod 644 {} \;
O que faz: Procura no diretório rome (find /home) arquivos (-type f) com permissão 777 (-perm 777) que pertençam ao usuário root (-user root) e executa chmod 644 em cada arquivo (representado por “{}”).
O fim do comando -exec deve ser explicitado, pois você pode usar expressões tanto antes de “{}” (isto é chamado de lista) quanto depois.
Coloca-se o caracter “\”, assim o shell não interepretará o caractere seguinte, que é o “;”, que indica o final da instrução “-exec”. -
find /home -type f -ctime +10 && -60 -exec mv {} /tmp/teste \;
O que faz: Procura arquivos no diretório home com permissão 777 (find /home -type f -perm 777) e move para a pasta /tmp/teste (“-exec mv {} /temp/teste \;”)
- Sintaxe:
- Para incrementar as buscas é interessante saber como trabalhar com expressões regulares, assunto este que será tratado em outro artigo.
Darei alguns exemplos da utilidade de expressões regulares, mas não se preocupe em entender, pois é um assunto para outro artigo.
O recurso “-iname” é usado quando você não quer diferir maiúscula de minúscula, isto é, retira o modo case sensitive do termo a ser buscado. Ao usar a expressão seguinte entre aspas simples, você estará usando expressões regulares ao invez de um nome específico, ou seja, é um “-iname/-name” mais elaborado.- Exemplo1 :
find /home -iname '.*jpg'
Busca todos os arquivos que tenham qualquer caracter (representado por “.”) em qualquer quantidade (representado por “*”) e que termine por “jpg”.
- Exemplo 2:
find /home -iname 'DSC.*\.jpg'
Busca por arquivos que comecem por “DSC” e que contenham qualquer coisa em qualquer quantidade até encontrar um “.jpg”.
- Exemplo1 :