Um dos comandos mais úteis no gerenciamento de arquivos no terminal do Linux
é o comando find. Ele permite realizar e automatizar tarefas que na interface gráfica levariam muito tempo. Executar o comando find sem argumentos faz com que ele liste todos os arquivos do diretório atual e de seus subdiretórios.
Para procurar dentro de um diretório específico, informe o caminho ao find:
find caminho/onde/procurar
O find recebe uma série de parâmetros úteis. É bom lembrar que o diretório de procura precisa ser sempre o primeiro parâmetro. Assim, para procurar por todos os arquivos de extensão bak no diretório atual, faça:
find -name "*.bak"
E para procurar dentro de um diretório específico, use:
find caminho/onde/procurar -name "*.bak"
O find permite a você construir uma série de expressões de procura e operação com os arquivos, algumas bastante complicadas (e poderosas). Vamos dar uma olhada em algumas bem simples. Para apagar os arquivos, use -delete. Então, para apagar todos os arquivos bak no diretório atual e em seus subdiretórios, faça:
find -name "*.bak" -delete
Você também pode passar parâmetros numéricos, que funcionam segundo a seguinte lógica:
- Um número sozinho significa exatamente aquele número, por exemplo:
3
- Com um sinal de mais, significa maior do que aquele número:
+3
- Com um sinal de menos, significa menor do que aquele número:
-3
Para ver uma lista dos arquivos modificados há menos de três dias, faça:
find -mtime -3
Para ver os que foram modificados a mais de três dias, inverta o sinal:
find -mtime +3
As expressões mais comuns para uso com tempo são:
- -amin – quando o arquivo foi acessado, em minutos.
- -atime – quando o arquivo foi acessado, em dias.
- -cmin – quando o arquivo foi criado, em minutos.
- -ctime – quando o arquivo foi criado, em dias.
- -mmin – quando o arquivo foi modificado, em minutos.
- -mtime – quando o arquivo foi modificado, em dias.
Outras expressões bastante úteis são:
- -regex: funciona como -name, mas recebe uma expressão regular
.
- -size: filtra pelo tamanho do arquivo. É um número seguido de uma letra. As mais comuns são: c – bytes, k – kilobytes, M – megabytes e G – gigabytes.
Por fim, você também pode mandar o find executar operações nos arquivos. Foi o que fizemos no início, quando usamos -delete para apagar arquivos. Dentre as operações, minha predileta é a -exec.
Quando você coloca -exec numa linha de comando do find, tudo o que vem depois até o próximo “;” é entendido pelo find como um comando, que ele vai executar para cada um dos arquivos encontrados. É obrigatório colocar “;” para terminar o comando, se você se esquecer vai receber o seguinte erro:
$ find -exec ls
find: faltando argumento para `-exec'
Onde você quiser passar para seu comando o nome do arquivo, use {}. Por exemplo, para tirar a permissões de execução de todos os arquivos TXT na busca, você pode fazer:
find -name "*.txt" -exec chmod -x {} ";"
Isso vai executar, para cada um dos arquivos encontrados:
chmod -x ARQUIVO ;
O último truque que eu gostaria que você guardasse na manga é que você pode combinar o find com o excelente comando grep. Grep faz buscas dentro de um arquivo. Com o parâmetro -l o grep apenas lista o nome do arquivo se a expressão regular de busca for encontrada. Então, para encontrar todos os arquivos python
que contém o texto “urllib” você pode fazer:
find -name *.py -exec grep -l urllib {} ";"
O find, é claro, tem muito mais recursos e opções. Se quiser mesmo se aprofundar, man find.