Esta dica trata da necessidade de localizar arquivos, algo que é bastante comum na rotina de trabalho de um sysadmin.
Ela também é a primeira de uma série de dicas rápidas para uso no terminal. Em sua grande maioria serão dicas curtas, baseadas em exemplos, sobre comandos invocados via linha de comandos com privilégios administrativos ou não e que costumo usar com bastante frequência e certamente serão uteis para outros usuários. Espero que sejam uteis.
O comando find é a principal ferramenta de buscas por arquivos via linha de comandos. Com dezenas de parâmetros ela permite realizar diversos tipos de busca uteis, como nos exemplos abaixo:
1 – Digamos que você queira localizar um aquivo dentro do diretório /etc cujo nome é “Xlogo”, mas você está na dúvida sobre quais letras de fato são maiúsculas e quais não.
$ find /etc -iname 'xlogo'
Perceba o parâmetro “iname”, que faz a “mágica” de dizer ao find para ser “insensitivo” as letras maiúsculas e minusculas no nome.
Se precisar você pode usar caracteres curingas também para eliminar letras que você não tenha certeza.
2 – Para encontrar o driver da minha placa de rede Realtek 8169 que certamente está no diretório de módulos do Kernel (/lib). Unica certeza que eu tenho é que no nome do arquivo possui o código 8169, mas o restante do nome eu não faço ideia.
$ find /lib -name '*8169*'
Atente que usei o “-name” pois só informei números se tivesse alguma letra talvez fosse interessante o “-iname”. Perceba ainda os “*” que indicam qualquer quantidade de caracteres desconhecidos e principalmente ao fato de que usei aspas simples(‘) e não aspas duplas (“), pois do contrário o shell faria a interpretação dos “*” e poderíamos ter resultados inesperados.
3 – É muito comum acumularmos lixo no sistema e uma das formas de lixo que detesto são os arquivos terminados em “~”. Estes são arquivos de backup criados por algumas aplicações durante a edição de um arquivo original e que passado algum tempo não possuem qualquer utilidade podendo ser seguramente removidos.
$ find $HOME -name '*~' -delete
O que realmente remove os arquivos é parâmetro de ação “-delete”. Aquele “$HOME” que coloquei ali é uma variável de ambiente que contém o caminho para o meu diretório home que no caso seria /home/wbraga. Se tivesse digitado este caminho completo o comadno faria o mesmo efeito.
4 – Imagine que você queira localizar arquivos maiores que 1GB no meu home. Forma simples:
$ find $HOME -size +1G
O parâmetro “-size +1G” diz que são arquivos cujo tamanho (size) tem “+” que ”1GB”. Experimente com outros valores!
5 – Se você gostou da dica acima, mas precisava mais informações sobre os arquivos além de meramente saber o seu nome talvez o parâmetro de ação “-ls” ajude.
$ find $HOME -size +1G -ls
Este parâmetro funciona “quase igual” ao comando ls que você já deve estar acostumado, mostrando usuário grupo, tamanho, data de modificação, nome etc.
6 – Para remover os arquivos encontrados, ao invés de listar seus nomes apenas troque o parâmetro de ação. Ao invés de “-ls” use “-delete”. Simples assim 😉
$ find $HOME -size +1G -delete
7 – Arquivos maiores que 1G e menores que 3G também são igualmente fácil de achar.
$ find $HOME -size +1G -and -size -3G -ls
8 – Da mesma forma podemos localizar arquivos modificados a menos de 1minuto.
$ find $HOME -mmin -1 -ls
Isso é muito útil quando você altera vários arquivos de uma só vez e depois esquece quais alterou para notificar a outras pessoas.
9 – A dica do parâmetro “-and” também está valendo para tempo. Suponhamos que você alterou inúmeros arquivos nos últimos 30 minutos e saiu para tomar um café. Quando volta o seu chefe está te esperando com cara de zangado dizendo que o site da empresa está fora do ar. Você coça a cabeça mas não vem a mente o nome dos arquivos que você mexeu e que precisariam voltar do backup. Você sabe que levou uns 15 minutos na máquina de café, então o comadno abaixo pode te ajudar a lembrar os arquivos modificados neste intervalo entre 30 e 15 minutos atrás.
$ find $HOME -mmin -30 -and -mmin +15 -ls
10 – Como última dica sobre o find fica o poderoso parâmetro de ação “-exec” que permite executar qualquer comando sober os arquivos encontrados.
Digamos que você queira localizar arquivos contendo um determinado texto. Você poderia fazê-lo assim:
$ find /var/www -type f -exec grep -H 'class=xview' {} ';'
Este é simples mas cheio de novidades para serem usadas em suas necessidades diárias.
O “-type f” diz que só interessam arquivos. Poderia ter especificado, ou seja, diretórios não serão considerados na listagem.
O parâmetro de ação “-exec” requer um comando que você execute normalmente via linha de comandos (neste caso usei o “grep -H” para localizar strings dentro de um arquivo retornando o nome do arquivo e o número da linha).
O código “{}” representa o nome do aquivo encontrado pelo “find”
O ‘class=xview’ é o texto que eu procuro dentro dos arquivos (como exemplo procure por algo que você sabe que existe no seu sistema)
E o ‘;’ que deve ser digitado exatamente assim ou a sua variante \; que indicam ao parâmetro “-exec” o final da sua linha de comandos. Sem isso o seu comando não funcionará.
Falar sobre o find é uma fonte inesgotável de assuntos. O que mostrei aqui é somente uma gotinha no oceano então em breve eu posto mais dicas.
Até a próxima.
excelente post foi muito claro a forma como descreveu os comandos