find
Find e’ um otimo aliado, mas vejo que muita gente ao meu lado nao usa ele com todo o potencial dele.
… keep it simple stupid, work smart not hard.
– some Unix guy…
find
historia
O find apareceu na versao 1 do AT&T UNIX e foi removido na versao 3 do proprio. Um novo programa do mesmo nome foi escrito para o “Programmer’s Workbench (PWB)” e foi lancado na versao 5 do AT&T UNIX. E novamente foi rescrito para o 4.3BSD-Reno.
versoes
Eu uso OpenBSD, e meus exemplos sao todos usando a versado do find que vem com ele. Caso voce use algum GNU/Linux e’ bem provavel que alguns exemplos vao ter alguma mudanca nos argumentos, as vezes para pior, as vezes para melhor. Por exemplo, no GNU Find Utilities, voce pode usar o argumento size passando por exemplo G para gigabyte. Recomendo sempre olhar o manual da sua versao.
name
Vamos comecar com o basico, vamos buscar todos os arquivos “.jpg” no diretorio atual e seus filhos.
~> find . -name "*.jpg"
./krig/changelog/static/i/2016/NC6ZuZu.jpg
./krig/changelog/static/i/fun/ps2-vs-usb.jpg
./krig/changelog/static/i/cv/cv_00k.jpg
./krig/changelog/static/i/cv/cv_qt.jpg
./krig/changelog/static/i/cv/cv_uol.jpg
./krig/changelog/static/i/cv/cv_vb.jpg
./krig/changelog/static/i/cv/cv_vt.jpg
./krig/changelog/public/i/2016/NC6ZuZu.jpg
./krig/changelog/public/i/fun/ps2-vs-usb.jpg
type
Por default, o find vai sempre filtrar o name por arquivos, mas e' sempre ideal manter claro que queremos filtrar por arquivos, para isso adicionamos o type no comando.
~> find . -name "*.jpg" -type f
./krig/changelog/static/i/2016/NC6ZuZu.jpg
./krig/changelog/static/i/fun/ps2-vs-usb.jpg
./krig/changelog/static/i/cv/cv_00k.jpg
./krig/changelog/static/i/cv/cv_qt.jpg
./krig/changelog/static/i/cv/cv_uol.jpg
O type as seguintes opcoes…
- b -> block
- c -> character
- d -> diretorio
- f -> arquivos
- l -> link simbolicos
- p -> FIFO
- s -> socket
Usando qualquer uma dessas opcoes, o find ira’ retornar apenas o type escolhido.
size
Agora vamos dizer que queremos todos os arquivos com um certo tamanho… O find pode nos ajudar nisso tambem.
~/om> find . -type f -size +1024c -size -2048c
./C/Captain Beyond - Captain Beyond (1972; 1997) [FLAC]/info.txt
./C/Captain Beyond - Captain Beyond (1972; 1997) [FLAC]/Captain Beyond - Captain Beyond.cue
Nesse exemplo1 estou buscando por todos os arquivos que tenham entre 1024bytes e 2048bytes.
*time
Ok, ja’ conseguimos pegar arquivos pelo nome, tamanho e tipo… Que tal pela data de acesso (atime), modificacao (mtime) e mudanca (ctime) dele?
- atime -> ultima vez que o arquivo foi aberto/lido
- ctime -> ultima mudanca de metadados do arquivo, como por exemplo o path e permissao
- mtime -> ultima modificacao no conteudo do aqruivo
Funciona do mesmo modo que o size… Exemplo:
find . -type f -atime +10 -atime -15
Ou arquivos que nao foram abertos a mais de um ano…
find . -type f -atime +365
user / group
Arquivos que pertencem a um user? O find consegue trazer para nos tambem…
find . -user umgeher
O mesmo funciona para group.
man
O find tem N opcoes para uso. Leia o manual dele. Vai facilitar a sua vida na hora de manipular uma grande quantidade de arquivos.
Captain Beyond e’ uma banda sensacional. O disco com o proprio nome da banda para mim e’ o melhor de todos. E’ literalmente um post-deep-purple bem raiz. Viagem do inicio ao fim. Otima trilha para uma noite de soft coding. ↩︎
/comments ~umgeher/changelog@lists.sr.ht?Subject=Re: find
/permalink https://umgeher.org/posts/2022/03/find.html