O comando find nos ajuda a encontrar um arquivo específico dentro de um diretório. Ele é usado para encontrar a lista de arquivos para várias condições, como permissão, propriedade do usuário, modificação, data/hora, tamanho e muito mais.
Em sistemas operacionais do tipo Unix e outros, o comando find é um utilitário de linha de comando que localiza arquivos com base em alguns formatos especificados pelo usuário e imprime o nome do caminho de todos os objetos correspondentes ou, se outras ações forem solicitadas, implementa essa ação em todos os objetos correspondentes.
Ele inicia uma busca a partir de um local desejado e, em seguida, percorre recursivamente os diretórios (nós) de uma estrutura hierárquica (geralmente uma árvore). O comando find pode pesquisar e percorrer diferentes sistemas de partição de arquivos pertencentes a um único ou mais dispositivos de armazenamento no diretório inicial.
O formato de pesquisa contém um padrão para correspondência com o nome do arquivo ou o intervalo de tempo para correspondência com o horário de modificação ou horário de acesso ao arquivo. O comando find fornece uma lista de todos os arquivos no diretório de trabalho atual por padrão. No entanto, os usuários podem restringir a pesquisa a um nível máximo desejado no diretório inicial.
Os programas de localização associados aplicam um banco de dados de arquivos indexados obtido do comando fino para fornecer uma técnica mais rápida de pesquisa em todo o sistema de arquivos por nome.
O utilitário find vem por padrão com a maioria dos Distribuições Linux , portanto não precisamos instalar nenhum pacote adicional. É um dos comandos mais essenciais e utilizados do Linux sistema.
find
As duas opções determinam como o find deve considerar os links simbólicos. A natureza padrão é nunca buscar links simbólicos. A bandeira, ou seja, -EU , levará a descoberta a buscar links simbólicos. A bandeira, ou seja, -H , irá apenas buscar links simbólicos enquanto continua com os argumentos da linha de comando. Os sinalizadores são mencionados no padrão POSIX para o comando find. Uma extensão básica é um sinalizador, ou seja, -P , para desabilitar explicitamente o link simbólico a seguir.
Pelo menos um caminho deve antecipar a expressão. O comando find pode interpretar curingas internamente, e os comandos devem ser cuidadosamente citados para gerenciar o globbing do shell.
Os componentes da expressão são isolados pelo limite do argumento da linha de comando, geralmente indicado como espaço em branco na sintaxe do shell. Eles são considerados do lado esquerdo para o lado direito. Eles podem incluir componentes lógicos como OR e AND, bem como predicados (ações e filtros). GNU find contém vários outros recursos não mencionados pelo POSIX.
Os seguintes símbolos são usados para especificar o diretório:
(.) : Para o nome do diretório atual
(/) : Para o diretório raiz
Breve história do comando Find
O comando find ocorreu na versão 5 Unix como um elemento do Bancada de trabalho do programador projeto e foi especificado por Dick Haight com cpio, que foram desenvolvidos para serem usados em conjunto.
Originalmente, a implementação GNU do comando find foi especificada por Eric Decker . Mais tarde, foi desenvolvido por David MacKenzie, Tim Wood , e Jay Plett . Além disso, o comando find foi portado para o sistema operacional IBM i.
multiplexador dois para um
Predicados
As primárias amplamente utilizadas são:
Encontre padrões para implementar -print caso as condições sejam verdadeiras se a expressão não utilizar nenhum de -ok, -exec, -print ou -print0.
Operadores
Os operadores aprimoram as expressões do comando find. Eles são mencionados em ordem decrescente de precedência:
- expr1 expr2 (ou expr1 -a expr2 : AND. expr2 não é avaliado se expr1 for falso.
- expr1 -o expr2: OU. expr2 não é avaliado se expr1 for verdadeiro.
Exemplos do comando find
Vejamos os seguintes exemplos do comando find:
- Encontre arquivos por nome
- Encontre arquivos por tipo
- Encontre arquivos mais recentes
- Encontre e exclua um arquivo
- Encontre um diretório
- Encontre arquivos por hora de modificação
- Encontre arquivos com permissão
- Encontre e substitua arquivos
- Encontre texto em vários arquivos
Encontre arquivos por nome
Podemos pesquisar todos os arquivos que terminam com a extensão ‘.txt’. Para fazer isso, execute o comando abaixo:
find . -name '*.txt'
O comando acima listará todos os arquivos de texto do diretório de trabalho atual. Considere a saída abaixo:
Na saída acima, todos os arquivos com extensão '.txt' são listados com o comando find.
número do palíndromo
Encontrando arquivos por tipo
O parâmetro '-type' é usado para especificar o tipo de arquivo.
Alguns dos tipos de arquivo são os seguintes:
- f: arquivo normal
- d: diretório
- l: links simbólicos
- c: dispositivos de personagem
- b: bloquear dispositivos
Considere o comando abaixo:
find . -type d -name '*.bak'
O comando acima listará todos os diretórios com extensão ‘.bak’. Considere a saída abaixo:
Na saída acima, o comando 'find . -type d -name '*.bak' está exibindo todos os diretórios que terminam com '.bak'.
Encontre arquivos mais recentes
O parâmetro '-newer' auxilia na busca de arquivos mais recentes que o arquivo mencionado. Considere o comando abaixo:
find . -newer msg.txt
O comando acima exibirá todos os arquivos mais recentes que 'msg.txt' do diretório de trabalho atual. Considere a saída abaixo:
Na saída acima, todos os arquivos exibidos são mais recentes que o arquivo ‘msg.txt’.
Encontre e exclua um arquivo
A opção '-delete' é usada para excluir um arquivo específico. Precisamos ter muito cuidado ao usar este comando porque não há opção de desfazer se ele for executado uma vez. Considere o comando abaixo:
find . -name Demo.txt -delete
O comando acima excluirá o arquivo ‘Demo.txt’ do diretório de trabalho atual. Considere a saída abaixo:
Encontre um diretório
A opção 'type -d' é usada para encontrar um diretório. Considere o comando abaixo:
find . type -depth -name Newdirectory
O comando acima encontrará o local ‘Newdirectory’. Considere a saída abaixo:
Encontre arquivos por hora de modificação
A opção '-mtime', seguida do número de dias, é usada para localizar os arquivos por modificação. O número de dias pode ser positivo ou negativo. O valor negativo será usado para menos do que -1 é usado para o último dia e, da mesma forma, +1 encontrará o arquivo há mais de um dia. Considere o comando abaixo:
diagrama uml java
find ./Newdirectory -mtime -1
O comando acima encontrará os arquivos que foram modificados no último dia. Considere a saída abaixo:
Encontre arquivos com permissão
A opção '-perm' é usada para localizar arquivos com permissão. Execute o comando find com a opção '-perm' e passe o valor necessário. Considere o comando abaixo:
find ./ -perm 777
O comando acima listará os arquivos do diretório especificado que todos podem ler, escrever e executar.
Encontre e substitua arquivos
Para localizar e substituir arquivos, temos que combinar o comando find com o comando sed. Para operar em arquivos, use a opção '-exec' com o comando find. Considere o comando abaixo:
find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ;
do comando acima, a ocorrência especificada será substituída. Considere a saída abaixo:
Encontre texto em vários arquivos
Podemos fazer outra combinação do comando find com o comando grep para localizar o texto dos vários arquivos. Considere o comando abaixo:
find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ;
O comando acima encontrará as linhas contendo o texto ‘demo’ de todos os arquivos de texto dentro do diretório ‘Newdirectory’. Considere a saída abaixo:
Na saída acima, podemos ver que as linhas com o texto 'demo' foram exibidas.
Pesquise todos os diretórios
$ find / -name file1 -type f -print
O comando acima encontra todos os diretórios de um arquivo normal cujo título é arquivo1 e o imprime na tela. Geralmente, não é uma boa ideia pesquisar arquivos dessa forma. Pode levar um bom tempo. Portanto, é melhor mencionar o diretório. Alguns sistemas operacionais podem montar sistemas de arquivos (dinâmicos) que não são favoráveis ao comando find. Nomes de arquivos mais complicados contendo caracteres exclusivos do shell podem precisar ser fechados entre aspas simples.