find - Procurar arquivos e diretórios

find - Procurar arquivos e diretórios

Diferentes formas de procurar por um arquivo

Por nome

Com case-sensitive

find . -name "arquivos.txt"

Sem case-sensitive

find . -iname "arquivos.txt"

Por tipo

Pesquisar por diretório

find . -type d

Pesquisar por arquivo

find . -type d

Por data

Arquivos mais antigos em n dias

find . -mtime +1

Arquivos modificados em n dias

find . -mtime -1

Lista todos os arquivos alterados em menos de 1 minuto

find . -mmin -1

Lista todos os arquivos alterados nas últimas 24 horas

find . -newermt "-24 hours" -ls

Listar todos os arquivos alterados no dia 11/04/2020

find . -newermt "2020-04-11" -ls

Por permissão

Procurar arquivos por permissão por modo octal

find . -perm -744

Por proprietário

Procurar arquivos pertencentes a um usuário

find . –user anderson

Procurar arquivos pertencentes a um grupo

find . –group adm

Por tamanho

Procurar arquivos com o tamanho exato de 10m

find . -size 10M

Procurar arquivos com o tamanho superior a 10m

find . -size +10M

Com menos de 10m

find . -size -10M

Por arquivo vazio

Procurar por arquivos ou pastas vazias

find . -empty
find . -type d -empty
find . -type f -empty

Unidades de medida para utilizar com o find -size

CarácterDescrição
cbytes
kkilobytes
Mmegabytes
Ggigabytes
Bblocos de 512-byte

Procurar por tipo

Procurar arquivos por tipo

find . -type f
CarácterDescrição
farquivo normal
ddiretório ou pasta
llink simbólico
cdispositivos de caracteres
bdispositivos bloqueados

Condicionais para combinar diferentes formas de pesquisa

and

find -name "*dog" -type f

-and é o padrão, o comando acima é igual a find -name "*dog" -and -type f

or

find -name "dog" -or -name "cat"

not

find -not -name "dog"

group

find \( -name "dog" -or -name "cat" \) -type f
É importante ter um espaço depois de \( e antes de \), caso o contrário ocorrerá um erro.

Alias de condicionais

  • -o = -or
  • -a = -and
  • !   = -not (Talvez precise escapar \!)

Executar ações com os arquivos encontrados

O find não seve somente como uma forma de procurar arquivos, ele também serve como um filtro para executar comandos.

Deletar arquivos encontrados

Devemos tomar cuidado com esse parâmetro use-o apenas em ocasiões que o arquivo sempre terá que ser apagando, sem existir o risco de perder informação.

find . -name "*.tpm" -delete

Executar um comando para cada arquivo encontrado

Com o parâmetro -exec podemos executar um comando para cada arquivo encontrado ou para todos ao mesmo tempo.

Esse parâmetro, por padrão, substitui os caracteres {} com o caminho de cada arquivo encontrado ou com a lista de todos os arquivos encontrados.

No final do -exec sempre temos que utilizar \; ou +:

  • \; o comando será executado separadamente em cada arquivo encontrado.
  • + o comando será executado uma única vez para todos os arquivos encontrados.
Existem alguns comandos que aceitam como parâmetro mais de um arquivo ou caminho, mkdir pata1 pasta2 pasta3 ou touch arquivo1.txt arquivo2.txt arquivo3.txt, são nesses casso que podemos utilizar o + no final do -exec, se for utilizado com um comando que não é compatível com esses exemplos o resultado não será o esperado.

Irá executar o chmod em cada arquivo encontrado

find -name "*.php" -exec chmod 755 {} \;

Irá executar o chmod uma única vez em todos os arquivos encontrados

find -name "*.php" -exec chmod 755 {} +;

Outros

Limitar um número de subdiretórios

find . -maxdepth 1

Exemplo prático

Procurar todos os arquivos .php e .phtml que não tem a permissão 755 e modificar a permissão para esse valor.

find . \( -name "*.php" -or -name "*.phtml" \) -type f -not -perm 0755 -exec chmod 755 {} \;