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ácter | Descrição |
---|---|
c | bytes |
k | kilobytes |
M | megabytes |
G | gigabytes |
B | blocos de 512-byte |
Procurar por tipo
Procurar arquivos por tipo
find . -type f
Carácter | Descrição |
---|---|
f | arquivo normal |
d | diretório ou pasta |
l | link simbólico |
c | dispositivos de caracteres |
b | dispositivos 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
\(
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.
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 {} \;