índice
2. Forma gramatical e parâmetros comuns
Quando usamos Linux, um dos comandos que frequentemente usamos para localizar arquivos é find.Compreender a função e o uso de find pode melhorar a eficiência do trabalho. A seguir descreve o uso de find com exemplos específicos.
1. Conceitos básicos
O comando find é usado para localizar arquivos (referindo-se a arquivos e diretórios comuns) no diretório e subdiretórios especificados .
2. Forma gramatical e parâmetros comuns
2.1 Forma gramatical
encontre [caminho ...] [expressão]
Entre eles, caminho é o caminho de busca, e vários caminhos são separados por espaços; expressão: consiste em opções e ações.
2.2 Parâmetros comuns
-name padrão: Encontre arquivos de acordo com o padrão especificado;
padrão -iname: igual ao parâmetro -name, a diferença é que ele não diferencia maiúsculas de minúsculas;
-tipo c: Localiza arquivos de acordo com o tipo de arquivo c;
Dentre eles: c representa o tipo de arquivo, os valores possíveis são:
d: diretório;
f: arquivo comum;
l: link simbólico;
s: soquete;
c: arquivo de caracteres especiais;
b: arquivo de bloco especial;
p: pipeline de comando (FIFO)
-ctime n: localiza os arquivos modificados nos últimos n dias;
-cnewer file: encontra arquivos que são mais recentes que o file file ("update": refere-se à hora da modificação);
-exec commond {} \ ;: executa o comando shell listado neste parâmetro no arquivo encontrado, preste atenção a um espaço entre {} e \;
-ok commond {} \ ;: A função e o modo de parâmetro são iguais a -exec, mas sempre que o commond for executado, o usuário será questionado se deseja executá-lo. Digite S / N para selecionar.
Três, explicação de exemplo
3.1 parâmetro -name / -iname
Primeiro, crie o arquivo readme.md no diretório atual e, em seguida, encontre o arquivo cujo nome corresponde ao padrão "* README.md".
[root@localhost go]# touch readme.md
[root@localhost go]# find . -name "*README.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
[root@localhost go]#
Como você pode ver no exemplo acima, os arquivos que satisfazem o padrão "* README.md" foram todos encontrados, mas o arquivo em minúsculas readme.md não foi encontrado. Vejamos o resultado da substituição do parâmetro -iname:
[root@localhost go]# find . -iname "*ME.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
./readme.md
[root@localhost go]#
Como você pode ver, o arquivo readme.md em minúsculas também foi encontrado.Esta é a diferença entre -name e -iname.
PS: No Linux, o parâmetro i geralmente significa que o comando não diferencia maiúsculas de minúsculas.
3.2 - parâmetro de tipo
Encontre todos os diretórios com o nome "* src".
[root@localhost go]# find . -type d -name "*src"
./src
./src/cmd/api/testdata/src
./src/cmd/go/testdata/modlegacy/src
./src/cmd/internal/src
./src/cmd/link/testdata/testPErsrc
./src/go/build/testdata/withvendor/src
[root@localhost go]#
Como você pode ver no exemplo acima, todos os diretórios que atendem ao padrão "* src" são exibidos e nenhum arquivo comum que atende às condições é listado.
Encontre todos os arquivos com o nome "* src".
[root@localhost go]# find . -type f -name "*src"
./src/cmd/compile/internal/syntax/testdata/issue20789.src
./src/cmd/compile/internal/syntax/testdata/issue23385.src
./src/cmd/compile/internal/syntax/testdata/issue23434.src
./src/cmd/compile/internal/syntax/testdata/issue31092.src
./src/cmd/compile/internal/syntax/testdata/sample.src
./src/go/parser/testdata/commas.src
./src/go/parser/testdata/issue11377.src
./src/go/parser/testdata/issue23434.src
……
Como pode ser visto no exemplo acima, todos os arquivos comuns que correspondem ao padrão "* src" foram encontrados, sem incluir os diretórios.
Parâmetro 3.3 -ctime
Primeiro, crie o arquivo testCtime em / var / account e, em seguida, pesquise os arquivos modificados no último dia no diretório atual.
[root@localhost account]# ls
pacct
[root@localhost account]# touch testCtime
[root@localhost account]# find . -ctime -1
.
./testCtime
[root@localhost account]#
Como você pode ver acima, ambos "." E testCtime foram encontrados, onde "." Representa o diretório atual.
3.4 -cnewer parâmetro
Primeiro, crie dois arquivos testOne e testTwo e, em seguida, crie um diretório testdir para localizar arquivos mais recentes que testOne.
[root@localhost go]# touch testOne
[root@localhost go]# touch testTwo
[root@localhost go]# mkdir testdir
[root@localhost go]# find . -cnewer testOne
.
./testTwo
./testdir
[root@localhost go]#
Como pode ser visto nos resultados da consulta acima, os arquivos mais recentes que testOne podem ser consultados .
3,5 parâmetro -exec / -ok
Procure por arquivos que correspondam ao padrão "README.md" no diretório e subdiretórios atuais e execute o comando ls -l para obter os resultados.
[root@localhost go]# find . -name "README.md" -exec ls -l {} \;
-rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
-rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
-rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
-rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
-rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
-rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
-rw-r--r--. 1 root root 8678 9月 10 00:57 ./src/cmd/vendor/golang.org/x/sys/unix/README.md
-rw-r--r--. 1 root root 577 9月 10 00:57 ./test/README.md
[root@localhost go]#
Da mesma forma que acima, altere o parâmetro de -exec para -ok e execute da seguinte forma:
[root@localhost go]# find . -name "README.md" -ok ls -l {} \;
< ls ... ./README.md > ? y
-rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
< ls ... ./misc/trace/README.md > ? y
-rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
< ls ... ./src/cmd/compile/README.md > ? y
-rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
< ls ... ./src/cmd/compile/internal/ssa/README.md > ? y
-rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
< ls ... ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md > ? y
-rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
< ls ... ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md > ? y
-rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
< ls ... ./src/cmd/vendor/golang.org/x/sys/unix/README.md > ? N
< ls ... ./test/README.md > ? N
[root@localhost go]#
Como você pode ver no exemplo acima, toda vez que executar o comando ls -l, será perguntado se deseja executá-lo.
Quatro, resumo
Os parâmetros comuns de find estão listados acima. Deve-se notar que a pesquisa de find é uma pesquisa recursiva. Por exemplo, ao pesquisar no diretório atual, ele irá pesquisar por arquivos no diretório atual e subdiretórios por padrão.
Cinco, referências
[1] https://www.runoob.com/linux/linux-comm-find.html
[2] https://man7.org/linux/man-pages/man1/find.1.html