comando find e parâmetro do caminho

1

Tendo a estrutura de arquivos assim:

/root/abc/1.txt
/root/abc/2.txt

e sentado no /rootdiretório.

1.) Por que o comando não:

encontrar . -caminho "abc / *. txt"

não retorna resultados enquanto

encontrar . -caminho "./abc/*.txt"

e

encontrar . -caminho "* / abc / *. txt"

trabalha?

2.) Qual é a diferença entre find . -path "./abc/*.txt" efind . -path "*/abc/*.txt"

Mulligan
fonte

Respostas:

2

Questão 1:

O -path patternparâmetro corresponde ao nome do arquivo inteiro.

$ find
.
./abc
./abc/1.txt
./abc/2.txt

O padrão abc/*.txtnão corresponde sem a liderança ./.

Questão 2:

O curinga *pode corresponder a qualquer sequência de qualquer tamanho (incluindo /e .caracteres). O parâmetro -path "*/abc/*.txt"possui dois curingas, portanto, ele pode corresponder a qualquer um dos seguintes:

./abc/a.txt
*     *


./abc/ANYTHING.txt
*     ********

def/ghi/abc/SOMETHING.txt
*******     *********

./abc/def_dsa/faf.txt
*     ***********
Steven
fonte
Eu cometi um erro de digitação na pergunta 2: deveria ser find . -path "*/abc/*.txt"sim find . -path "\*/abc/*.txt". Você pode ser tão gentil e responder a essa pergunta corrigida?
Mulligan
@Mulligan Editou a resposta. Isso responde sua pergunta?
7116 Steven
Sim, thx. para obter ajuda :-)
Mulligan
Então, estou certo de que esse -pathpadrão é aplicado ao resultado do que find .produz e é por isso que minha primeira tentativa falha?
Mulligan
1
Você está correto
Steven
0

A seguinte frase é da -pathopção no findmanual:

Observe que o teste de correspondência de padrões se aplica a todo o nome do arquivo, iniciando em um dos pontos de início nomeados na linha de comandos.

Isso explica por que seus padrões de pesquisa alternativos ( "./abc/*.txt"e "*/abc/*.txt") funcionam. Seu padrão de pesquisa original ( "abc/*.txt") funcionará apenas se a raiz da pesquisa for abc:

find abc/ -path "abc/*.txt"

Quanto à diferença entre "./abc/*.txt"e "*/abc/*.txt", nem vai tentar expandir a corda antes de chamar find: o primeiro vai encontrar apenas os arquivos no diretório de nível superior ./abc/, mas o segundo vai encontrar arquivos em qualquer subdiretório abc, como ./def/abc/, ./ghi/def/abc/, etc, bem como ./abc/.

AFH
fonte
Eu cometi um erro de digitação na pergunta 2: deveria ser find . -path "*/abc/*.txt"sim find . -path "\*/abc/*.txt". Você pode ser tão gentil e responder a essa pergunta corrigida?
Mulligan
1
A diferença entre "./abc/*.txt"e "*/abc/*.txt"é que o primeiro corresponderá ./abcsomente aos arquivos de texto no diretório de nível superior , enquanto o segundo corresponderá não apenas aqui, mas também em ./def/abcou em qualquer outro subdiretório mais abaixo na hierarquia.
AFH