#
Utilizando o comando find
para procurar arquivos e diretórios no Linux ou MacOS
O comando find
permite aos usuários buscar arquivos, diretórios, links simbólicos, dispositivos de caracteres e dispositivos de bloco em seu sistema de arquivos.
Além disso, você pode usar várias opções e operadores com o comando find para refinar sua pesquisa. Isso inclui pesquisar por tipo de arquivo, permissões, proprietário, grupo, tamanho, data de modificação e muito mais.
#
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
Procurar arquivos com menos de 10m
find . -size -10M
#
Unidades de medida para utilizar com o find -size
#
Por arquivo vazio
Procurar por arquivos ou pastas vazias
find . -empty
Procurar por pastas vazias
find . -type d -empty
Procurar por arquivos vazios
find . -type f -empty
#
Procurar por tipo
Procurar arquivos por tipo
find . -type f
#
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 resultados do find
O find não seve somente como uma forma de procurar arquivos, ele também serve como um filtro para executar comandos.
#
Deletar resultados 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 comando para os resultados encontrados
Com o parâmetro -exec
, podemos executar um comando para cada resultado encontrado, ou um comando para todos os resultados encontrados simultaneamente.
Existem alguns comandos que aceitam mais de um parâmetro. Por exemplo, com o comando chmod
, podemos fazer o seguinte: chmod 755 arquivo1.txt arquivo2.txt arquivo3.txt
. São nesses casso que podemos utilizar o +
no final do -exec
, caso seja utilizado com um comando que não é compatível com esses múltiplos parâmetros o resultado não será o esperado.
No final do -exec
sempre temos que utilizar \;
ou +
:
\;
o comando será executado separadamente em cada resultado.+
o comando será executado uma única vez para todo resultado.
Com o -exec
utilizamos o conjunto de caracteres {}
para indicarmos onde deverá ficar os resultados encontrados pelo find
.
Executar o chmod
em cada arquivo encontrado (pois utilizados o \;
):
chmod 755 arquivo1.txt
, chmod 755 arquivo2.txt
e chmod 755 arquivo3.txt
.
find -name "*.php" -exec chmod 755 {} \;
Executar o chmod
uma única vez em todos os arquivos encontrados (pois utilizados o +
):
chmod 755 arquivo1.txt arquivo2.txt arquivo3.txt
find -name "*.php" -exec chmod 755 {} +
#
Configurando a profundidade da pesquisa
#
Número máximo de níveis de diretórios
Pesquisar somente no diretório atual
find . -maxdepth 0
Pesquisar no diretório atual e no primeiro nível de subdiretório
find . -maxdepth 1
Pesquisar no diretório atual e no primeiro e segundo nível de subdiretório
find . -maxdepth 3
#
Número mínimo de níveis de diretórios
Pesquisa somente nos subdiretórios em diante
find . -mindepth 1
#
Dica da Dica
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 {} \;